blur()vs. onblur()

DA.*_*DA. 22 javascript jquery onblur

我有一个带有onblur事件监听器的输入标签:

<input id="myField" type="input" onblur="doSomething(this)" />
Run Code Online (Sandbox Code Playgroud)

通过JavaScript,我想触发此输入上的模糊事件,以便它反过来调用该doSomething函数.

我最初的想法是调用模糊:

document.getElementById('myField').blur()
Run Code Online (Sandbox Code Playgroud)

但这不起作用(虽然没有错误).

这样做:

document.getElementById('myField').onblur()
Run Code Online (Sandbox Code Playgroud)

这是为什么?.click()将通过onclick监听器调用附加到元素的click事件.为什么不blur()以同样的方式工作?

Poi*_*nty 29

这个:

document.getElementById('myField').onblur();
Run Code Online (Sandbox Code Playgroud)

因为你的元素(the <input>)有一个名为"onblur"的属性,其值是一个函数.因此,你可以调用它.但是,您并没有告诉浏览器模拟实际的"模糊"事件; 例如,没有创建事件对象.

元素没有"模糊"属性(或"方法"或其他),所以这就是为什么第一件事不起作用.

  • @DA:`.blur()`在某些浏览器中确实存在,但是如果没有它,首先需要给予元素焦点.[试试这个例子](http://jsfiddle.net/zYQqa/1/)在Chrome中.我不知道哪些浏览器支持/不支持它. (3认同)

Eli*_*ing 11

与尖锐的说法相反,该blur()方法确实存在并且是w3c标准的一部分.以下exaple将适用于每个现代浏览器(包括IE):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <title>Javascript test</title>
        <script type="text/javascript" language="javascript">
            window.onload = function()
            {
                var field = document.getElementById("field");
                var link = document.getElementById("link");
                var output = document.getElementById("output");

                field.onfocus = function() { output.innerHTML += "<br/>field.onfocus()"; };
                field.onblur = function() { output.innerHTML += "<br/>field.onblur()"; };
                link.onmouseover = function() { field.blur(); };
            };
        </script>
    </head>
    <body>
        <form name="MyForm">
            <input type="text" name="field" id="field" />
            <a href="javascript:void(0);" id="link">Blur field on hover</a>
            <div id="output"></div>
        </form>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

请注意,我使用link.onmouseover而不是link.onclick,因为否则点击本身将删除焦点.