2009-10-06 125 views
3

我在写一个表单验证脚本,并希望在onblur事件触发时验证给定的字段。我也想使用事件冒泡,所以我不必为每个表单字段添加一个onblur事件。不幸的是,onblur事件不会冒泡。只是想知道是否有人知道可以产生相同效果的优雅解决方案。事件冒泡和onblur事件

+0

每个表单字段都有不同的验证函数,或者它对于所有字段都是相同的? – Peter 2009-10-06 13:54:54

+0

他们都使用相同的回调函数。回调函数在html元素上查找某些类,告诉它如何验证(如“required”或“integer”) – spudly 2009-10-06 14:02:13

回答

-2

AA,你可以简单地添加窗体上的onblur事件,并会调用验证每次更改焦点任何元素它

+1

你确定吗?我不会认为这个表格会模糊,特别是因为它首先不能关注。 – nickf 2009-10-06 14:00:56

+1

正如我在我的问题中所说的,onblur事件不会冒泡。请在吐出答案之前仔细阅读这个问题。 – spudly 2009-10-06 14:03:33

8

你会需要使用符合标准的浏览器事件捕获(相对于鼓泡)和focusout为IE:

if (myForm.addEventListener) { 
    // Standards browsers can use event Capturing. NOTE: capturing 
    // is triggered by virtue of setting the last parameter to true 
    myForm.addEventListener('blur', validationFunction, true); 
} 
else { 
    // IE can use its proprietary focusout event, which 
    // bubbles in the way you wish blur to: 
    myForm.onfocusout = validationFunction; 
} 

// And of course detect the element that blurred in your handler: 
function validationFunction(e) { 
    var target = e ? e.target : window.event.srcElement; 

    // ... 
} 

为瑞见http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html CY详情

2

使用 '事件的内容' 事件,因为它有泡沫了effect..thanks。

0

使用具有onblur事件冒泡,然后你可以使用的addEventListener()和将useCapture参数设置为。就像这样:

yourFormInput.addEventListener('blur', yourFunction, false); 

的Firefox 51及以下不支持onfocusout事件。因此,请勿使用onfocusout而不是onblur事件。