5

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

4

5 回答 5

9

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

于 2009-10-06T14:16:10.717 回答
5

使用“ Focusout ”事件,因为它具有起泡效果..谢谢。

于 2012-10-23T10:47:36.333 回答
2

ppk 对此有一种技术,包括 IE 的必要解决方法:http ://www.quirksmode.org/blog/archives/2008/04/delegating_the.html

于 2009-10-06T14:10:03.720 回答
0

要使用onblur事件冒泡,然后您可以使用 addEventListener() 并将 useCapture 参数设置为false。像这样:

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

Firefox 51 及以下不支持该onfocusout事件。所以不要使用onfocusout代替onblur事件。

于 2017-03-09T09:16:01.667 回答
-2

aa,您可以简单地在表单上添加 onblur 事件,并且每次您将焦点更改为其中的任何元素时都会调用验证

于 2009-10-06T13:59:22.550 回答