2012-11-13 54 views
2

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

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

例如,通过点击事件附加到一个选择,一个写道:

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

但是,如果我想将焦点设置到该元素是什么?我会怎么做?我已经尝试过:

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

而且我还有什么不该尝试的。

我需要这样做的原因是因为此刻(以前我在这里),标准$('.mledit').focus();不起作用。其他一切看起来都没问题,但那条指令并不是。所以,我想知道在这种情况下是否可以使用document.on()。

回答

2

此:

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

你知道你的东西。谢谢你,Sime。 – gibberish

+0

幕后发生了什么?为什么这个工作? – gibberish

+1

@gibberish为什么* what *工作?你在问''[0]'吗?如果是,那么基本上当你在jQuery中使用一个选择器时,它会返回一个匹配元素的数组,'[0]'只是说使用匹配的第一个元素。 – Jack

1

当你想将焦点设置..只是做 - 但如果你有一个以上的,你必须指定一个将焦点设置到使用.EQ()或[]

$('.mledit').focus() 

的jQuery还提供该trigger()方法,为您在事件传递给触发

0

你将代替上使用触发器。

$(SELECTOR).trigger(EVENT_TYPE); 
0

当你需要对符合 “选择” 的元素触发事件 “富”,使用此语法:

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

你的情况:

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

.on是为绑定事件,您正在寻找的是一种对元素上的事件trigger的方法。

例如

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

与此同时,jQuery的也有一些方便/快捷功能,该罩下将委托要么。对或.trigger取决于它们是如何调用。

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

$('.mledit').focus() 

引擎盖下它真的只是委托给trigger方法,但是如果你在一个函数时它反而会绑定该功能通过selecter

刚刚看到您的编辑。

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

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

$('#someSelecter')[0] 

所以你的情况,以明确触发只有一个焦点事件(第一个匹配)元素

您可以使用

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

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

+0

非常感谢这个伟大的解释。 +1引擎盖下的信息。 – gibberish

相关问题