J'ai une balise d'entrée avec un écouteur d'événement onblur:
<input id="myField" type="input" onblur="doSomething(this)" />
Via JavaScript, je veux déclencher l'événement de flou sur cette entrée afin qu'il appelle à son tour la fonction doSomething
.
Ma pensée initiale est d'appeler flou:
document.getElementById('myField').blur()
Mais cela ne fonctionne pas (mais pas d'erreur).
Cela fait:
document.getElementById('myField').onblur()
Pourquoi donc? .click()
appellera l'événement click attaché à un élément via l'écouteur onclick. Pourquoi blur()
ne fonctionne-t-il pas de la même manière?
Cette:
document.getElementById('myField').onblur();
fonctionne parce que votre élément (le <input>
) a un attribut appelé "onblur" dont la valeur est une fonction. Ainsi, vous pouvez l'appeler. Vous pas dites au navigateur de simuler l'événement "flou" réel, cependant; par exemple, aucun objet événement n'est créé.
Les éléments n'ont pas d'attribut "flou" (ou "méthode" ou autre), c'est pourquoi la première chose ne fonctionne pas.
Contrairement à ce que dit pointu, la méthode blur()
existe et fait partie de la norme w3c . L'exemple suivant fonctionnera dans tous les navigateurs modernes (y compris 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>
Notez que j'ai utilisé link.onmouseover
au lieu de link.onclick
, car sinon le clic lui-même aurait supprimé le focus.
Je suppose que c'est juste parce que l'événement onblur est appelé en conséquence de l'entrée perdant le focus, il n'y a pas d'action flo associée à une entrée, comme il y a un - clic action associée à un bouton