2

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

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

例如,要通过点击事件附加到选择器,可以这样写:

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

但是,如果我希望将焦点设置在该元素上怎么办?我该怎么做?我努力了:

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

我不知道还能尝试什么。

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

4

5 回答 5

3

.on用于绑定事件,您正在寻找的是一种在元素上触发事件的方法。

例如

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

同时,jQuery 也有一些方便/快捷的函数,它们在底层将委托给 .on 或 .trigger ,这取决于它们的调用方式。

例如你也可以使用focus方法来触发焦点

$('.mledit').focus()

在引擎盖下它实际上只是委托给trigger方法,但是如果你要传入一个函数,它会将该函数绑定到传入的selecter.

刚看到你的编辑。

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

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

$('#someSelecter')[0]

因此,在您的情况下,仅在一个(和第一个匹配的)元素上显式触发焦点事件

您可以使用

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

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

于 2012-11-13T20:27:52.700 回答
2

这个:

$('.mledit')[0].focus();
于 2012-11-13T20:25:02.940 回答
1

当你想设置焦点时.. 就做 - 虽然如果你有多个,你必须使用 .eq() 或 [] 指定要设置焦点的一个

$('.mledit').focus()

jQuery 还提供了trigger()方法让你传入一个事件来触发

于 2012-11-13T20:24:42.430 回答
0

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

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

在你的情况下:

$('.mledit').trigger("focus");
于 2012-11-13T20:27:08.433 回答
0

您将使用触发器而不是 on。

$(SELECTOR).trigger(EVENT_TYPE);
于 2012-11-13T20:25:51.170 回答