Onblurイベントリスナーを持つinputタグがあります。
_<input id="myField" type="input" onblur="doSomething(this)" />
_
JavaScriptを介して、この入力でblurイベントをトリガーし、doSomething
関数を呼び出します。
私の最初の考えは、ぼかしを呼び出すことです。
_document.getElementById('myField').blur()
_
しかし、それは機能しません(エラーはありません)。
これは:
_document.getElementById('myField').onblur()
_
何故ですか? .click()
は、onclickリスナーを介して要素にアタッチされたクリックイベントを呼び出します。 blur()
が同じように機能しないのはなぜですか?
この:
document.getElementById('myField').onblur();
あなたの要素(<input>
)には、値が関数である「onblur」という属性があります。したがって、それを呼び出すことができます。ただし、実際の「ぼかし」イベントをシミュレートするようブラウザに指示するのはnotです。たとえば、イベントオブジェクトは作成されません。
要素には「ぼかし」属性(または「メソッド」など)がないため、最初のものは機能しません。
先のとがったこととは反対に、blur()
メソッドは存在し、 w3c standard の一部です。次の例は、最新のブラウザ(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>
link.onmouseover
の代わりにlink.onclick
を使用したことに注意してください。そうしないと、クリック自体がフォーカスを削除してしまうためです。
Onblurイベントが呼び出されるからだと思います結果として入力がフォーカスを失い、入力に関連付けられたblurアクションはありません。 クリックボタンに関連付けられたアクション