2010-06-24 50 views
8

因此,在特定页面上,我拥有一些表单元素数量,可以是3到8之间的任意值,具体取决于用户及其在页面上的操作。将onBlur添加到所有表单元素

如何在页面上动态添加一个特定的onblur事件到所有的表单元素?

如果我有:

function doThisOnBlur() { stuff } 

如何添加相同的功能,所有的这些曾经在页面加载。页面加载后不会创建元素,但不同的用户可能会看到不同的元素。

<input type="text" id="x"> 
<input type="text" id="y"> 
<select id="z">...</select> 

这可能吗?

+0

具体作为每个元素独特?在动态创建的元素上飞行吗? – Matt 2010-06-24 19:02:13

回答

14

编辑:对于更新的问题
使用.blur()并为此匿名函数(不要紧多少个元素有):

$(":input").blur(function() { 
    //do stuff 
}); 

如果您需要绑定某些功能在某一特定区域,在名称上使用类或attribute selector,任何可以区分它们的东西......如果选择器没有找到一个元素,它就不会将事件处理程序绑定到任何东西。这样,相同的整体代码适用于全部用户,即使他们只能看到某些的可用表单元素。


对于原来的问题:如果元素被页面加载后动态地添加。
我认为.live()捕捉blur事件后,你在这里是什么,使用:input的选择:

$(":input").live('blur', function() { 
    //do stuff 
}); 
+0

或'$(“:input”)。blur(function(){..});'实时观看未来元素的页面,如果页面加载后没有添加元素,这并不是真的需要。两者都可以工作。 – 2010-06-24 19:09:19

+0

@Jim - 这个问题在我发布这个答案后进行了编辑以澄清,我将更新以包括他的编辑。 – 2010-06-24 19:14:45

7

没有jQuery的:

function doThisOnBlur(){ 
// your fancy code 
} 

var inputs = document.getElementsByTagName('input'); 
var selects = document.getElementsByTagName('select'); 

for (var i = 0; i < inputs.length; i++) 
    inputs[i].onblur = doThisOnBlur; 
for (var i = 0; i < selects.length; i++) 
    selects[i].onblur = doThisOnBlur; 

我做了最简单的,我可以。我会重构这个,不要这样分配事件处理程序,但我指出要回答你的问题。

+0

这是如何工作的动态添加元素? :) – 2010-06-24 19:09:39

+0

如果你想动态元素绑定,那么我会使用jQuery:活着做到这一点,他们几乎已经把这个功能下到了T恤! – RobertPitt 2010-06-24 19:14:54

+0

不知道为什么我写了这个,我应该检查你的名字,并意识到你发布了一个答案不是问题:/对不起 – RobertPitt 2010-06-24 19:15:45