在JS控制台中使用jQuery

在有些时候,比如你正在浏览我的博客http://x1989.com,并且你想通过浏览器的js console控制台对页面进行调试,而你又不愿放弃熟悉的jQuery语法而使用原生的javascript,这时候只要地址栏中输入以下代码:

javascript:void((function(){var e=document.createElement('script');e.setAttribute('src','http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js');document.body.appendChild(e);})())

以下是在各种浏览器中调出javascript console的快捷键:

IE : F12

Chrome & Opera:Ctrl+Shift+i

FireFox : F12 (必须预装Firebug)

由此,你想到了什么……

Android Layout中使用include标签实现UI布局重用

1、创建一个独立的布局文件作为共享布局,common_layout.xml



  

2、在主布局中使用标签进行包含



    

Javascript中的事件委托(转)

事件的冒泡与捕获

如果不是动态绑定事件,事件委托是可能的。早期的web开发,浏览器供应商都会面临一个严肃的问题,就是当你点击网页中一个区域 什么元素是你实际想要触发的。这个问题伴随着页面元素交互的定义问题,点击任意一个元素的内部边界是模糊的。
点击一个按钮看看,你实际点击在一个按钮元素的内部,也是body元素内部,还是html元素的内部。

当这个问题出现的时候,有两个主要的浏览器:Netscape和IE。他们各自决定以不同的方式解决这个问题。网景公司定义的方法称为事件捕捉,一旦事件触发最先影响到DOM树最顶层对象(document),然后一直影响到事件源。因此,在这个例子中,单击事件的事件捕获最早由document处理,然后在<HTML>元素,然后是<body>,最后是<button>元素。

在IE中处理方式正好相反。 IE团队定义了一个方法称为事件冒泡。事件冒泡说的是,事件源元素的事件应该第一个被触发,那么它的父元素应该接收事件,然后它的父元素的父元素,等等,直到最后document对象接收事件。虽然document没有一个独特的视觉表现从<html>分开,但仍然被认为是<html>的父元素,从而继续冒泡DOM结构顶端。前面的例子可以看<button>首先接收到事件,然后就到<body>,再后到<html>,最后到达document对象。

当定义DOM标准时,W3C组织显然发现了事件的捕获机制与冒泡机制的优点,因而在DOM 2事件制定中支持这两种机制。首先,document对象接收一个事件,然后在捕获期间找到最具体的事件影响的元素,一旦这个元素绑定这个事件,事件将以冒泡的形式返回到document对象。DOM addEventListener() 函数接受三个参数,分别是事件名、事件句柄、支持事件冒泡还是捕获机制布尔值,绝大部分的web开发者会把这个最后那个参数设置为false,以期在IE中能有attachEvent()函数一样功能。

通过一个附加属性来进行事件与事件句柄绑定(element.onclick = function(){}),事件将被自动作为冒泡机制来处理(这是为了向后兼容),几乎每一款浏览器除了IE(即便是IE8)都支持DOM 2事件处理捕获与冒泡机制,而IE仍然只支持冒泡。

在冒泡机制中使用事件委托

事件委托在关键在于使用冒泡处理最顶层元素(通常是document对象),并非所有的事件都会冒泡,但是但鼠标和键盘事件会,也是也我们感兴趣的事件。回顾早先的事例,你可以为document对象绑定一个click事件,然后判断事件源,根据事件源不同来执行不同函数。

document.onclick = function(event){
    //IE doesn't pass in the event object
    event = event || window.event;

    //IE uses srcElement as the target
    var target = event.target || event.srcElement;    

    switch(target.id){
        case "help-btn":
            openHelp();
            break;
        case "save-btn":
            saveDocument();
            break;
        case "undo-btn":
            undoChanges();
            break;
        //others?
    }
};

使用事件委托,可以把众多的事件处理缩减到一个,当前所有click事件都被一个根据事件源不同进行不同操作的函数处理,你还可以以同样的方式创建mousedown, mouseup, mousemove, mouseover, mouseout, dblclick, keyup, keydown,  keypress事件处理程序。还有一句忠告,mouseover、mouseout因为它们的特性决定了他们通过事件委托很难处理。

注:你也可以使用事件捕获机制来建立事件委托,但是它将不能在IE浏览器中运行。

好处:

1,更少的函数管理
2,使用更少内存
3,更少的DOM处理Javascript代码
4,改变DOM元素的innerHTML时不必担心事件绑定被删除

从传统的事件处理转移到事件委托改善了世界各地大型web应用的性能。这项目工作十分重要,YUI与JQuery 已经把事件委托提炼为核心接口。只要花很小的代价实现事件委托,但性能有十分明显的提升。当你把几十个事件处理转化为一个事件处理程序好处显尔益见。进行事件委托的尝试吧,或许你将再也不会使用传统的事件处理方式了。

原文地址http://hzjavaeyer.group.javaeye.com/group/blog/720926 (译)

PHP5.3配置:一定要记得把短标签开起来

要不…就over啦,会直接输出php源代码,discuz ecshop之类的程序都会出现这种状况,唯独只有我自己基于thinkphp开发的程序正常。。估计是tp出于兼容性考虑把模板中的短标签<? ?>处理成兼容的<?php ?>标签了,话说tp的开发者们真是经验丰富哈

几点琐事&My First Android Application

作为学生的最后一个暑假正式宣告结束~在请假回家若干天之后回归校园生活。值得高兴的是,在公司的全职工作也顺利转为了兼职实习,要感谢张总的肯定和提携~新的生活又开始了,上午上课,下午上班——难道这就是所谓的半工半读?好吧,我也认了。

从下定决心到开始Android开发之旅至此,前后算是有一周的时间了吧。越来越发自内心的感叹,在Android这个框架下编程真是一种享受~Google的技术真不是盖的。固然Android的SDK有些微软WPF、Adobe Flex的影子,但Android开发平台上最强大的还要算是Google提供的各式各样的api。这种开发方式,姑且称之为Google Model,造福的还是最广大的开发者。

Ubuntu 10.04密码正确不能进系统的原因

今天很奇怪,开机到登录界面,输入密码、回车,黑屏两三秒后,又退回到了登录界面,重试几次,亦是如此反复。

但如果输入错误密码,还会直接提示认证失败,输入正确密码就不会。这说明Ubuntu还是能识别到是正确密码的。

想起我昨天搭建Android开发环境时候,修改到了/etc/environment中的环境变量,估计是改错了。想进修复模式修改,未果。于是想个办法进了liveCD,输入

sudo gedit /media/XXXXXXXXXXXX/etc/environment  #注:XXXXXXXXXXXX表示你文件系统所在的路径名,可以进文件管理器看到),然后把你加上的地方删掉,保存、重启,就顺利进入系统了

可是这样就没办法在终端里使用adb(Android Debug Bridge)了,我们可以用其他的方法:

cd ~

sudo gedit export PATH=${PATH}:/home/xhowhy/android-sdk-linux_86/tools #后面的路径记得换成你的sdk tools所在路径

无所不能的Mr.Android管家——首届 Google 暑期大学生博客分享大赛——2010 Andriod 篇

无所不能的Mr.Android管家

Mr.Android管家 - Senior Butler Mr.Android

如果你还只是把手机看成打电话发短信的家伙,那你就Out了。手机早已超越了打电话发短信如此本质的应用,并且已经实现了上网,拍照,听歌,玩单机游戏等新的功能,同时越来越趋向于成为链接虚拟的与现实之间的终端

伟大的Google于2007年11月5日宣布了即将到来的Android手机操作系统。谁也没想到的是,这位Mr.Android竟能在两年后引发手机操作系统乃至智能手机市场板块的地震:

在Gartner于8 月12日发布的报告中,Android体系野蛮生长,居然从 09 年的 1.8%,用一年的时间,增长到了 17.2% 的市场份额!Android 取代了 iOS 的位置,成为第三大智能手机操作系统,而在美国市场,则取代了黑莓老大的位置。

而这一切,比Gartner在2009年9月的预测整整提早了两年……
那么机器人先生缘何有这样撼动市场格局的实力呢?我想其中最大的缘由还是Google赋予Mr.Android的创造力,而创造力的根源来自开放性——任何厂商的任何形式的设备,都不会在选择Android的权利上受到限制,也不用担心自身产品的底层代码因开源协议的限制被竞争对手利用,因为Android遵从最开放的Apache Software License 2.0开源协议。就因为如此,厂商和应用开发者在技术上可以无顾忌的进行创新,机器人可以在手机、MID、平板电脑、上网本、电子书阅读器等众多电子设备上为用户服务,真正成为了无所不能的机器人

回忆未来——链接虚拟的与现实的终端

在现代生活中,我们已经能够通过各种各样的计算机终端为我们的生活创造便利和舒适,我们通过终端进行通信并且获取感兴趣的信息。如果说Windows系统的GUI把人们从命令行操作下解救出来,使得我们的操作体验显得更人性化、更方便,那么无线网络和手持终端的普及,最终将促使数字世界和现实世界的全面融合。在不久的将来,我们的Mr.Android,将带给我们一个崭新的时代——我们在现实世界中可以充分享受到信息化给我们带来的便利。

可以预想,凭借Google在网络领域的驾轻就熟,Mr.Android完全有能力接管我们的生活,成为我们生活的管家。它不仅可以为我们提供一切生活所需的信息,也有能力帮我们处理好琐碎的生活细节——举个例子,我们每天不再需要下楼买菜,Mr.Android已经帮我们制定了今天的食谱,并在网上超市下了订单,我们只需等待超市送货上门。再比如,忙了一天工作下班回家,Mr.Android已经帮你打扫了一天的家务,空调已经打开,饭也已经做好,浴缸里的水也已经放好……毫无疑问,有了Mr.Android,您相当于雇佣了一位高级的管家|顾问。

有人预言,五年后,智能手机的名词将不复存在,因为所有的手机都已经是智能手机,非智能手机将最终消失,这点我很赞同,而我更是相信,出自Google的这位Mr.Android能用最先进的科技为这个星球上的居民创造数字时代幸福的生活。

首届 Google 暑期大学生博客分享大赛——2010 Andriod 篇

跨域获取json数据





	
	




在Firefox中伪造浏览器请求头信息(User-agent)

  1. 在地址栏输入”about:config” 然后回车,进入设置页面
  2. 在过滤器中输入”user”,进行选项搜索
  3. 找到”general.useragent.extra.firefox”选项,将该值修改成你所想要的浏览器版本,如”Internet Explorer 8.0″

这样,就实现了http请求头信息中浏览器版本的伪造。

Ecshop二次开发之自定义库文件和模板数据调用

Smarty的标签非常多,也比较繁琐,所以Ecshop使用了精简版的Smarty,其中用到的Smarty模板语法:

{$keywords} 输出模板变量
{$array.test.abc} 输出二维数组
{$lang.remark_package} 语言包$lang[remark_package]
{insert_scripts files='common.js'} 引入js文件
xxxx 循环
xxxx  判断
  引入goods_tags.lbi库文件,相当于PHP的include
{*内容*}  html注释,只在模板上显示,页面上会被删除掉.

Ecshop二次开发的数据调用,主要动用到以下两个目录下的文件
dwt(模板文件)路径: themes\default
lbi(库文件)路径: themes\default\library
举个例子就很清楚了,是我从网上找来的,由于转载得很严重,所以不知道真正出处。。
我们在themes\default\library下新建一个名为newest_comments.lbi的库文件,写入以下内容:

if(!function_exists("get_new_comments")){
function get_new_comments($num)
{
   $sql = 'SELECT * FROM '. $GLOBALS['ecs']->table('comment') .
            ' WHERE status = 1 AND parent_id = 0 and comment_type=0 '.
            ' ORDER BY add_time DESC';
  if ($num > 0)
  {
   $sql .= ' LIMIT ' . $num;
  }
  //echo $sql;
  $res = $GLOBALS['db']->getAll($sql);
  $comments = array();
  foreach ($res AS $idx => $row)
  {
   $comments[$idx]['add_time']       = $comments[$idx]['add_time']       = local_date
($GLOBALS['_CFG']['time_format'], $row['add_time']);
   $comments[$idx]['user_name']       = $row['user_name'];
   $comments[$idx]['content']       = $row['content'];
   $comments[$idx]['id_value']       = $row['id_value'];
  }
  return $comments;
}
}
$this->assign('new_comments',get_new_comments(10)); // 10条最新评论
?>


时间:{$comment.add_time}

这样一个库文件就做好了。我们发现,库文件可以使用PHP、Smarty标签和HTML混写的写法,这无疑大大降低了我们二次开发的难度。这个库文件的作用,就是取出数据库中的10条最新评论,并且循环输出到模板。
接下来我们就要在模板中调用这个库文件,我们打开首页的模板themes\default\index.dwt(这里的dwt文件和页面都是一一对应,如商品页是goods.dwt,品牌页是brand.dwt)。我们在首页模板适当的地方加入:

 @@@这里即使修改了也没反应@@@

这样就实现了自定义库文件的编写和调用。
细心的你可能会发现,在Ecshop的dwt模板文件中,调用库文件标签<– #BeginLibraryItem “/library/和<– #EndLibraryItem –>之间存在着一些和对应的lbi库文件中重复的内容。你可以把它们当作是注释,用Dreamweaver等编辑器编辑模板时候的需要看见的注释。真正的库文件内容还需要到相应的库文件中去修改。好吧 ,就是这些,简单吧。