Ist es möglich, die dispatchEvent () - ein Mausklick auf ein <input type=text> - element?
Grundsätzlich bin ich versucht zu versenden custom made-Maus click-Ereignis für ein text-input-element mit dem folgenden code (siehe diesen jsFiddle):
function simulateClick(id) {
var clickEvent = document.createEvent("MouseEvents");
clickEvent.initMouseEvent("click", true, true, window, 1, 0, 0, 0, 0,
false, false, false, false, 0, null);
var element = document.getElementById(id);
element.dispatchEvent(clickEvent);
}
Wenn ich diesen code auf eine type="checkbox"
- element funktioniert es völlig in Ordnung, aber es funktioniert überhaupt nicht wenn man auf einem type="text"
element.
Nun, hier ist die definition von initMouseEvent()
auf MDN:
event.initMouseEvent(type, canBubble, cancelable, view,
detail, screenX, screenY, clientX, clientY,
ctrlKey, altKey, shiftKey, metaKey,
button, relatedTarget);
Also im obigen Beispiel screenX, screenY, clientX
und clientY
alle 0
(immer noch der obige code funktioniert einwandfrei in Ordnung, mit Checkboxen, unabhängig von Ihrer position). Ich habe versucht, erfassen eines realen Ereignisses und der übergabe der Bildschirm und die client-Koordinaten auf die cusom made Ereignis, ohne Erfolg.
Obwohl ich vielleicht text-input-Elemente ignorieren benutzerdefinierte Maus-Ereignisse, die aus Sicherheitsgründen, aber dann element.focus()
sollte nicht funktionieren, das tut es.
Irgendwelche Ideen oder Erkenntnisse wäre sehr dankbar!
InformationsquelleAutor der Frage Philip Kamenarsky | 2011-03-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Soweit ich kann sagen, dein code funktioniert einwandfrei. Aber es ist nicht der Fokus das Eingabefeld, wie Sie vielleicht denken, aber das Ereignis wird ausgelöst, auf das input-Feld nur in Ordnung, so gesehen, in dieser Fiedel: http://jsfiddle.net/ENvZY/
Hinweis: der code ist nicht crossbrowser-kompatibel aber nicht im ie8.
Überlegen Sie sich eine gute crossbrowser-Bibliothek wie jQuery zu gehen, anstatt das native DOM-Weg - Rad ist vorhanden und funktioniert einwandfrei, neu erfinden, es ist eine Verschwendung von Zeit 🙂
InformationsquelleAutor der Antwort Martin Jespersen