将onBlur添加到所有表单元素

Jas*_*son 8 javascript jquery

因此,在特定页面上,我有一些表单元素,在3到8之间,具体取决于用户及其在页面上的操作.

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

如果我有:

function doThisOnBlur() { stuff }
Run Code Online (Sandbox Code Playgroud)

一旦页面加载,如何将相同的功能添加到所有这些功能.页面加载后不会创建任何元素,但可能会为不同的用户显示不同的元素.

<input type="text" id="x">
<input type="text" id="y">
<select id="z">...</select>
Run Code Online (Sandbox Code Playgroud)

那可能吗?

Nic*_*ver 15

编辑:对于更新的问题
使用.blur()和匿名函数(无论有多少元素):

$(":input").blur(function() {
  //do stuff
});
Run Code Online (Sandbox Code Playgroud)

如果你需要将某些函数绑定到某些字段,请在名称上使用类或属性选择器,区分它们的任何东西......如果选择器没有找到元素,它就不会将事件处理程序绑定到任何东西.这样,相同的整体代码适用于所有用户,即使他们只看到一些可用的表单元素.


对于原始问题:如果在页面加载后动态添加元素.
我认为.live()捕获blur事件就是你在这里使用的事件,:input用作选择器:

$(":input").live('blur', function() {
  //do stuff
});
Run Code Online (Sandbox Code Playgroud)


Mat*_*ias 8

没有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;
Run Code Online (Sandbox Code Playgroud)

我尽可能地做到最简单.我会重构它并且不以这种方式分配事件处理程序,但我指出回答你的问题.