J'ai un événement oninput sur une zone de texte pour vérifier la hauteur et la redimensionner. Maintenant, je dois parfois modifier la valeur. Je le fais simplement en modifiant val () dans jQuery, mais cela ne déclenche pas l'événement oninput. Existe-t-il un moyen de déclencher l'événement oninput par programme avec jQuery?
Utilisez .on('input')
. Par exemple:
$('textarea').on('input', function() {
text = $('textarea').val();
$('div').html(text);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea placeholder="Type something here"></textarea>
<div></div>
C'est un peu trop tard, mais pour référence future, il y a la méthode .trigger.
$("#testArea").on("input", function(e) {
$("#outputArea").text( $(e.target).val() )
});
$("#testArea").val("This is a test");
$("#testArea").trigger("input");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input id="testArea" type="text" />
<div id="outputArea"></div>
Vous pouvez simplement l'invoquer, par exemple:
$("input")[0].oninput = function () {
alert("hello");
};
$("input")[0].oninput();
... mais comme @Sammaye le souligne, jQuery n'a pas de gestionnaire explicite "en entrée", vous devrez donc utiliser POJS.
oninput n'est pas encore dans JQuery.
Vous pouvez voir des articles à ce sujet ici:
http://forum.jquery.com/topic/html5-oninput-event
http://bugs.jquery.com/ticket/9121
Fondamentalement, le consensus général est qu’ils ne le veulent pas encore.
Mais non, changer directement val () ne déclencherait pas l'entrée html5 car sa spécification indique que l'utilisateur, dans l'interface utilisateur, change la valeur de l'entrée.
Modifier:
Cependant, certains ont gentiment fait un plugin pour ceux qui souhaitent utiliser uniquement des événements HTML5: https://github.com/dodo/jquery-inputevent
Vous pouvez vous lier à une entrée et changer:
input sera déclenché à l'entrée de l'utilisateur
change sera déclenché lors des affectations change () et val (""), mais après quelques modifications
$("#textarea").bind("input change", function() {
alert("change happend");
});
...
après que vous ayez lié à change vous pouvez l’appeler manuellement à chaque affectation val (""):
$("#textarea").val("text").change();
ou vous pouvez écraser la méthode jQuery val ("") pour déclencher changer sur chaque appel utilisateur val (""):
(function ($) { var fnVal = $.fn.val;
$.fn.val = function(value) {
if (typeof value == 'undefined') {
return fnVal.call(this);
}
var result = fnVal.call(this, value);
$.fn.change.call(this); // calls change()
return result;
};
})(jQuery);
Essayez avec "keypress" ou "keydown".
Exemple 1:
$("#textarea").keypress(function(){
alert($("#textarea").val());
});
Exemple 2:
$("#textarea").keydown(function(){
alert($("#textarea").val());
});