使用没有事件处理程序的document.on

时间:2012-11-13 20:23:02

标签: jquery

我现在已经多次遇到过这种情况,我希望使用document.on()来操作一个元素,但是无法弄清楚如何在没有事件的情况下使用.on()。

我经常使用ajax将元素注入DOM,并且经常需要使用document.on()来绑定那些注入的元素。当我希望选择一个元素并获取其信息时,这非常有效。

例如,要通过click事件附加到选择器,可以写一个:

$(document).on('click', '.mledit', function(event) {
    alert($(this).val());
}

但是,如果我希望将焦点设置为该元素呢?我该怎么办?我试过了:

$(document).on('focus', '.mledit');

并且不知道还有什么可以尝试。

我需要这样做的原因是因为目前(我以前来过这里),标准$('.mledit').focus();无效。其他一切似乎都没问题,但一条指令却没有。所以,我想知道在这种情况下是否可以使用document.on()。

5 个答案:

答案 0 :(得分:3)

.on适用于绑定事件,您正在寻找的是trigger元素事件的方法。

例如

$('.mledit').trigger('focus');

与此同时,jQuery还有一些便利/快捷功能,根据它们的调用方式,它们会委托给.on或.trigger。

例如,您也可以使用focus方法触发焦点

$('.mledit').focus()

它真的只是委托给trigger方法,但是如果要传入一个函数,它会将该函数绑定到传入的selecter

刚看到你的编辑。

我不确定使用$('.mledit').focus()时你的焦点事件为什么不起作用,但我怀疑是因为你匹配了多个元素而你只能关注一个元素。要解释你何时使用jQuery选择器,你得到的是一个jQuery对象,当你在这个返回的jQuery对象上调用一个方法时,你实际上是在所有匹配的元素上调用它。

作为访问匹配元素数组的第一个元素的快捷方式,您经常会看到

$('#someSelecter')[0]

因此,在您的情况下,只在一个(和第一个匹配的)元素

上显式触发焦点事件

您可以使用

$($('.mledit')[0]).focus() r

双重包装的原因是因为[0]返回一个常规的DOM元素,它没有jQuery方法(包装创建一个jQuery对象)。

答案 1 :(得分:2)

此:

$('.mledit')[0].focus();

答案 2 :(得分:1)

当你想设置焦点时......只是这样做 - 尽管如果你有多个,你必须指定哪一个设置焦点使用.eq()或[]

$('.mledit').focus()

jQuery还提供了trigger()方法,可以传递一个事件来触发

答案 3 :(得分:0)

您可以使用触发器代替on。

$(SELECTOR).trigger(EVENT_TYPE);

答案 4 :(得分:0)

每当您需要在与“selector”匹配的元素上触发事件“foo”时,请使用以下语法:

$('selector').trigger("foo");

在你的情况下:

$('.mledit').trigger("focus");
相关问题