我现在已经多次遇到过这种情况,我希望使用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()。
答案 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");