特别关于生活......
jQuery('.something').live('click', function() {
jQuery(this).parent('form').reset();
});
我认为这可能也有效,尽管我对父函数感到好奇:
jQuery('.something').live('click', function() {
this.form.reset();
});
答案 0 :(得分:3)
原型目前没有“实时”支持。但是,您可以使用事件委派执行类似的操作。这是你在父元素上观察事件的地方,然后在事件处理程序中找出事件实际发生在哪个子元素上:
$('theFormID').observe('click', handleFormClick);
function handleFormClick(event) {
var element;
// Get the element on which the click occurred
element = event.findElement();
}
事件委托仅适用于冒泡的事件(如“点击”);我不知道jQuery的实时内容是否有同样的问题。
一个好处是你可以将CSS选择器传递给Event#findElement
:
$('tbodyID').observe('click', handleTableClick);
function handleTableClick(event) {
var element;
// Get the element on which the click occurred
element = event.findElement('tr');
}
...找到点击的tr
,即使实际点击发生在span
内td
内的tr
内。
正确使用事件委托可以大大简化挂钩/取消挂钩元素,特别是当您动态添加和删除元素时。
如果Prototype的插件能够提供“实时”支持,我不会感到惊讶。
您提到要获取所点击控件的父级。当您使用Prototype连接处理程序时,默认情况下会进行设置,以便在处理程序中this
引用您设置事件处理程序的元素。例如,如果您的div
标识为foo
:
$('foo').observe('click', function(event) {
// Here, `this` will refer to the `foo` element
});
然后,您可以使用Prototype的Element#up来获取父元素。 (如果您正在使用事件委派,并且首先将事件挂钩在父上,当然只需直接使用this
,如果您还需要获取对该事物的引用点击后,使用上面的#findElement
。)