jquery使用心得---杂+完美级联
2011-04-07 22:21
274 查看
jquery
使用总结
作者
:
袁明勋
最近项目中前端一直使用的是
jquery
框架,公司平台也由
Ext
换成
jquery
。
jquery
确实是使用简单、容易上手、使用灵活的好框架,难怪它现在已经成为最流行的
javascript
框架之一。最近的一次项目中
,
因为大量的使用了
jquery
,让我对它有了一个深刻的了解,也让我不得不为之
感叹
!
在项目中除了使用了一些常用属性和方法外
,
还使用了诸如
:clone()
,
offset()
,
one
,
unbind
等一些属性和方法
,
以下是一些我阅读相关文档结合开发中的一些总结:
1.
整体
我们在使用
jquery
的时候需要这么写
$(document).ready (function(){});
,我一开始也是这么做的,后来在阅读
jquery
相关自资料的时候,发现有更简便的方法
$(function(){})
。也就是说
$
,替代了
$(document).ready
。其实这个
$
,指的就是
jquery()
函数,是不是很简便?网友把
jquery
的四种使用方式叫做四大天王,这四个使用方法分别是
:
jQuery(expression,[context])
、
jQuery(html,[ownerDocument])
、
jQuery(elements)
、
jQuery(callback)
。
1). jQuery(expression,[context])
:指的就是
jquery
的选择器了。第一个参数表达式
,
第二个参数作用域
.
具体使用我这里就不详解了。我就说明几点:在使用选择器的时候尽量使用
id
标识选择,使用
id
标识的时候;最好把作用域给写上,并且范围尽量要小。这样做的目的是为了优化我们的程序,当作用域没有指明的时候,
jquery
默认会对整个
DOM
结构进行查找。
2).jQuery(html,[ownerDocument])
:
用于动态创建由
jQuery
对象包装的
DOM
元素
,
元素内容为
html
的内容,类似于
javascript
中的
document.createElement()
功能。
3).jQuery(elements)
:将
javascritp
elements
转换为
jquery
元素。如
:$(document.getElementById(“test”))
。那么我们如何将我们的
jquery
元素转换为
javascript
元素呢
?
方法有两个
:$(“#test”)[0]
和
$(“#test”).get(0)
。需要指明的是
jquery
元素只能调用
jquery
的方法
,javascript
只能调用
javascript
的方法。
4). jQuery(callback)
:
当
DOM
加载完成后,执行其中的
callback
函数
.
.
大部分情况下我们使用
$
就行了,它的意思是在
dom
加载完图片刚开始加载时候执行,但在有些时候,我们需要等图片加载完再执行呢?这个时候就可以使用
$(window).ready (function(){});
,不过我现在还没使用过
$(window).ready (function(){});
这两个的区别也很容易理解。
2. live()
和
bind()
看下面的例子
:
页面上
<input
type="button" class="test"
value="addbutton"/>
我们对它进行这样处理
$(".test").bind("click",
function(){
$("body").append($("<input
type='button' class='test' value='button'/>"));
});
这句代码的意思是我们点击
addbutton
后,在其后面追加一个
button
。我们还希望追加的这个
button
拥有与
addbutton
一样的功能。
这句代码执行后,页面上已经追加了一个
button
但是并当我们点击这个
button
的时候并不是我们想要的结果。我们试着把
bind
换成
live
看看结果会怎样
?
结果是点击追加的这个
button
拥有同样的添加
button
功能。代码如下
:
$(".test").live("click",
function(){
$("body").append($("<input
type='button' class='test' value='button'/>"));
});
扩展:
live()
à
die() :
移除绑定在对象上的
live()
事件
bind()
à
unbind() :
移除绑定在对象上的
bind()
事件
3.one()
我们先看看
API
的解释
:
每一个匹配元素的特定事件(像
click
)绑定一个一次性的事件处理函数。很容易理解,就是让事件执行一次,但是具体会在什么样的场合使用呢
?
我目前只在数据联动的时候用到过
.
功能需求
:
实现部门与员工二级联动
,
要求在没有选择部门时,需要将所有员工显示出来,在选择部门时,显示部门下的员工
.
实现原理
:
部门改变时改变员工的下拉框项
.
以下代码实验环境为
ssh+json+jquery.
页面上
:
部门
:
<
select
name
=
"
department
"
id
=
"department"
>
<
option
value
=
""
>
--
请选择
--
</
option
>
<
s:iterator
value
=
"departmentList"
>
<
option
value
=
"<
s:property
value
=
"id"
/>
"><
s:property
value
=
"name"
/></
option
>
</
s:iterator
>
</
select
>
员工
:
<
select
name
=
"
staff
"
id
=
"staff"
>
<
option
value
=
""
>
--
请选择
--
</
option
>
<
s:iterator
value
=
"userList"
>
<
option
value
=
"<
s:property
value
=
"id"
/>
"
><
s:property
value
=
"name"
/></
option
>
</
s:iterator
>
</
select
>
这里部门没有选择时,会显示所有员工。其实添加的时候功能实现比较简单
.
我这里讲下大概思路
.
$("#
department
")
.change(function(){
//
获得部门的
id
var departmentId=$("#
department
").val();
//
提交
post
请求
(
把部门
id
作为参数提交
)
//
这里提交返回的是
json
类型
,
如
:{“user”:[{“id”:”1”,”name”:”
袁明勋
”},{“id”:”2”,”name”:”
测
试
”}]}
//
当
post
请求成功以后
,
我们先对部门清空
$("#
department
").empty();
//
然后追加
option
//$("#
department
").append("<option
value='"+id+"'>"+name+"</option>");
这里的
id
和
name
由
json
返回
.
});
如此一样我们的级联添加就已经完成了。我们的问题是在编辑的时候,在编辑的时候我们通过从
action get
数据对部门和员工进行回显
.
$("#
department
").val(get
部门标识
);
$("#
staff
").val(get
员工标识
);
我们点击编辑的时候数据确实回显了
,
如果你是个仔细的人你会发现
:
点击编辑时,部门此时已经选中,这是正确的,但是当我们点击员工时,问题出现了
:
该下拉选项是所有员工。造成的结果是若用户按这种方式编辑,有可能出现这个员工不属于这个部门的情况
.
我有想过通过脚本直接去触发部门的
change
事件,我也试着这么做,但是结果失败了,这样会照成其他的问题。为什么一定要直接去触发部门的
change
事件呢
?
我们是不是可以通过员工间接触发部门事件?对,就是员工间接来改变部门
.
如果你能想到点击员工去间接触发部门改变事件,说明你已经离成功不远了。
$("#
staff
").bind(“click”, function(){
// -------------
$("#
staff
").trigger(“change”);
});
笔者首先想到了这种方法,但是员工将永远不能选择
.
好了,该我们的
one
登场了
:
$("#
staff
").one(“click”,
function(){
// -------------
$("#
staff
").trigger(“change”);
});
这么做对我们添加也没有一点影响
,OK,
大功告成
!
执行过程如图
:
触发部门
change
员工
click
部门
change
部门
chang
改变员工
在项目中还使用的属性和方法包括
:remove(),offset(),clone()
等
,
使用的事件包括
:click,dbclick,
右击
,
拖拽等
,
这些使用起来都是非常方便的
,
足以证明
jquery
的强大。
使用总结
作者
:
袁明勋
最近项目中前端一直使用的是
jquery
框架,公司平台也由
Ext
换成
jquery
。
jquery
确实是使用简单、容易上手、使用灵活的好框架,难怪它现在已经成为最流行的
javascript
框架之一。最近的一次项目中
,
因为大量的使用了
jquery
,让我对它有了一个深刻的了解,也让我不得不为之
感叹
!
在项目中除了使用了一些常用属性和方法外
,
还使用了诸如
:clone()
,
offset()
,
one
,
unbind
等一些属性和方法
,
以下是一些我阅读相关文档结合开发中的一些总结:
1.
整体
我们在使用
jquery
的时候需要这么写
$(document).ready (function(){});
,我一开始也是这么做的,后来在阅读
jquery
相关自资料的时候,发现有更简便的方法
$(function(){})
。也就是说
$
,替代了
$(document).ready
。其实这个
$
,指的就是
jquery()
函数,是不是很简便?网友把
jquery
的四种使用方式叫做四大天王,这四个使用方法分别是
:
jQuery(expression,[context])
、
jQuery(html,[ownerDocument])
、
jQuery(elements)
、
jQuery(callback)
。
1). jQuery(expression,[context])
:指的就是
jquery
的选择器了。第一个参数表达式
,
第二个参数作用域
.
具体使用我这里就不详解了。我就说明几点:在使用选择器的时候尽量使用
id
标识选择,使用
id
标识的时候;最好把作用域给写上,并且范围尽量要小。这样做的目的是为了优化我们的程序,当作用域没有指明的时候,
jquery
默认会对整个
DOM
结构进行查找。
2).jQuery(html,[ownerDocument])
:
用于动态创建由
jQuery
对象包装的
DOM
元素
,
元素内容为
html
的内容,类似于
javascript
中的
document.createElement()
功能。
3).jQuery(elements)
:将
javascritp
elements
转换为
jquery
元素。如
:$(document.getElementById(“test”))
。那么我们如何将我们的
jquery
元素转换为
javascript
元素呢
?
方法有两个
:$(“#test”)[0]
和
$(“#test”).get(0)
。需要指明的是
jquery
元素只能调用
jquery
的方法
,javascript
只能调用
javascript
的方法。
4). jQuery(callback)
:
当
DOM
加载完成后,执行其中的
callback
函数
.
.
大部分情况下我们使用
$
就行了,它的意思是在
dom
加载完图片刚开始加载时候执行,但在有些时候,我们需要等图片加载完再执行呢?这个时候就可以使用
$(window).ready (function(){});
,不过我现在还没使用过
$(window).ready (function(){});
这两个的区别也很容易理解。
2. live()
和
bind()
看下面的例子
:
页面上
<input
type="button" class="test"
value="addbutton"/>
我们对它进行这样处理
$(".test").bind("click",
function(){
$("body").append($("<input
type='button' class='test' value='button'/>"));
});
这句代码的意思是我们点击
addbutton
后,在其后面追加一个
button
。我们还希望追加的这个
button
拥有与
addbutton
一样的功能。
这句代码执行后,页面上已经追加了一个
button
但是并当我们点击这个
button
的时候并不是我们想要的结果。我们试着把
bind
换成
live
看看结果会怎样
?
结果是点击追加的这个
button
拥有同样的添加
button
功能。代码如下
:
$(".test").live("click",
function(){
$("body").append($("<input
type='button' class='test' value='button'/>"));
});
扩展:
live()
à
die() :
移除绑定在对象上的
live()
事件
bind()
à
unbind() :
移除绑定在对象上的
bind()
事件
3.one()
我们先看看
API
的解释
:
每一个匹配元素的特定事件(像
click
)绑定一个一次性的事件处理函数。很容易理解,就是让事件执行一次,但是具体会在什么样的场合使用呢
?
我目前只在数据联动的时候用到过
.
功能需求
:
实现部门与员工二级联动
,
要求在没有选择部门时,需要将所有员工显示出来,在选择部门时,显示部门下的员工
.
实现原理
:
部门改变时改变员工的下拉框项
.
以下代码实验环境为
ssh+json+jquery.
页面上
:
部门
:
<
select
name
=
"
department
"
id
=
"department"
>
<
option
value
=
""
>
--
请选择
--
</
option
>
<
s:iterator
value
=
"departmentList"
>
<
option
value
=
"<
s:property
value
=
"id"
/>
"><
s:property
value
=
"name"
/></
option
>
</
s:iterator
>
</
select
>
员工
:
<
select
name
=
"
staff
"
id
=
"staff"
>
<
option
value
=
""
>
--
请选择
--
</
option
>
<
s:iterator
value
=
"userList"
>
<
option
value
=
"<
s:property
value
=
"id"
/>
"
><
s:property
value
=
"name"
/></
option
>
</
s:iterator
>
</
select
>
这里部门没有选择时,会显示所有员工。其实添加的时候功能实现比较简单
.
我这里讲下大概思路
.
$("#
department
")
.change(function(){
//
获得部门的
id
var departmentId=$("#
department
").val();
//
提交
post
请求
(
把部门
id
作为参数提交
)
//
这里提交返回的是
json
类型
,
如
:{“user”:[{“id”:”1”,”name”:”
袁明勋
”},{“id”:”2”,”name”:”
测
试
”}]}
//
当
post
请求成功以后
,
我们先对部门清空
$("#
department
").empty();
//
然后追加
option
//$("#
department
").append("<option
value='"+id+"'>"+name+"</option>");
这里的
id
和
name
由
json
返回
.
});
如此一样我们的级联添加就已经完成了。我们的问题是在编辑的时候,在编辑的时候我们通过从
action get
数据对部门和员工进行回显
.
$("#
department
").val(get
部门标识
);
$("#
staff
").val(get
员工标识
);
我们点击编辑的时候数据确实回显了
,
如果你是个仔细的人你会发现
:
点击编辑时,部门此时已经选中,这是正确的,但是当我们点击员工时,问题出现了
:
该下拉选项是所有员工。造成的结果是若用户按这种方式编辑,有可能出现这个员工不属于这个部门的情况
.
我有想过通过脚本直接去触发部门的
change
事件,我也试着这么做,但是结果失败了,这样会照成其他的问题。为什么一定要直接去触发部门的
change
事件呢
?
我们是不是可以通过员工间接触发部门事件?对,就是员工间接来改变部门
.
如果你能想到点击员工去间接触发部门改变事件,说明你已经离成功不远了。
$("#
staff
").bind(“click”, function(){
// -------------
$("#
staff
").trigger(“change”);
});
笔者首先想到了这种方法,但是员工将永远不能选择
.
好了,该我们的
one
登场了
:
$("#
staff
").one(“click”,
function(){
// -------------
$("#
staff
").trigger(“change”);
});
这么做对我们添加也没有一点影响
,OK,
大功告成
!
执行过程如图
:
触发部门
change
员工
click
部门
change
部门
chang
改变员工
在项目中还使用的属性和方法包括
:remove(),offset(),clone()
等
,
使用的事件包括
:click,dbclick,
右击
,
拖拽等
,
这些使用起来都是非常方便的
,
足以证明
jquery
的强大。
相关文章推荐
- jquery淡入淡出的使用心得
- 对jqueryValidate的使用心得 这个例子和bootstrap联合用的
- 使用jquery JSON Handler实现级联效果
- jQuery动态创建html元素的常用方法使用心得
- jquery插件:jqgrid的入门使用心得
- 使用jQuery.form插件,实现完美的表单异步提交【转发】
- jquery插件:jqgrid的入门使用心得
- JQuery FlexiGrid的asp.net完美解决方案-dotNetFlexGrid使用指南(一)Ajax异步表格
- jquery插件:jqgrid的入门使用心得
- 使用jQuery.form插件,实现完美的表单异步提交
- JQuery分页插件使用心得
- Jquery ui Datepicker 使用心得
- JS,JQuery使用心得
- 【转】Jquery弹出层插件Thickbox使用心得
- jQuery中 trigger() & bind() 使用心得
- jQuery中 trigger() 使用心得
- jQuery dataTable 个人使用的一点心得
- jQuery 源码分析和使用心得 - core.js
- jquery 选择器 -高级使用 新的 心得
- jQuery弹出层插件Thickbox使用心得