我有一个很长的网络表单。我想知道我是否应该单独bind()到每个元素(我真正想要的)或者我应该只定义一个bind()所有的输入元素然后在处理程序中执行if-then来处理特定的元素? / p>
答案 0 :(得分:3)
jQuery的事件处理程序是用JavaScript实现的(它们必须是)。
通常,最好对整个表单使用单个处理程序,而不是使用大量单个元素。但是jQuery的live
功能可以提供很多帮助,它为你做了大量的事件代理管道工作。例如:
$("#formid input").live('focus', function(event) {
var field = $(this);
// `field` now references the field that was focussed
});
...观看formid
表单中的所有字段以进行焦点事件。如果你正在使用jQuery 1.4,那么即使focus
事件没有冒泡,它也能用于focus
事件,因此使用事件委托通常很棘手。在1.4之前不起作用,但是像click
这样的冒泡事件就是这样做的。
答案 1 :(得分:0)
我会绑定到所有输入,但您可以使用类将其缩小到您想要的输入。
而不是
$("#formid input").click(function() {
if($(this).attr('something') == 'special_field') {
//do A
}
});
为您感兴趣的元素<input class='special_field' ... >
添加一个类,然后更改您的选择器:
$("#formid input.special_field").click(function() {
//do A
});
这将把处理程序限制为只有所需的元素,而不进行任何if语句检查。
您可以对需要特殊处理的任何事情重复此操作。
关于.live()
方法的最终说明。由于几个原因,这可能非常方便:
body
元素上创建一个监听器(你可以选择另一个元素作为监听器)并等待一个偶数冒泡到它。当它冒泡时,它会针对选择器检查触发的元素,如果匹配则触发事件。