web-dev-qa-db-fra.com

Comment déclencher un événement d'entrée avec jQuery?

Je veux ajouter 'a' à la valeur d'entrée en cliquant sur un bouton

Voici mon code (avec jQuery 1.4.4):

$("#button").click(function(){
    $("#input").trigger("focus");
    var e = jQuery.Event("keypress");
    e.which = '97';
    $("#input").trigger(e);
})

Cependant, il ne semble que déclencher un événement 'focus', mais n'a pas réussi à 'appuyer sur une touche'.

12
user1990553

comme ça?? Désolé, je suis confus avec vos écrits ..

$("#button").click(function(){
    $("#input").trigger("keypress") // you can trigger keypress like this if you need to..
    .val(function(i,val){return val + 'a';});
});

référence: .val (fonction (index, valeur));

11
Reigel

J'ai utilisé:

$('#selector').val(quantity).trigger("input");
13
Luminita Balas

Pourquoi ne pas simplement ajouter à val()?

$("#button").click(function(){
  $("#input").val(
    $("#input").val() + "a"
  );
})
4
Grant Thomas

J'ai su comment y faire face.

Ajoutez un événement eventListener on keypress à l'entrée et utilisez val pour modifier la valeur.

De cette façon, il n'est pas nécessaire de déclencher un événement de focus.

$("#button").click(function(){
    var e = jQuery.Event("keypress");
    e.chara = 'a';
    $("#input").trigger(e);
});

$("#input").keypress(function(e){
    $(this).val(e.chara);
})
2
user1990553

Selon la documentation

Bien que .trigger () simule une activation d’événement, complétez avec un objet événement synthétisé, il ne réplique pas parfaitement un événement naturel.

donc le mieux que vous puissiez faire est

$("#button").click(function(){
    $("#input").trigger("focus").val($("#input").val() + 'a');
})
1
Arun P Johny

Si vous devez prendre en compte le curseur et la sélection de texte en cours ...

Cela ne fonctionnait pas pour moi pour une application AngularJS sur Chrome. Quelqu'un a fait remarquer que l'événement déclencheur ne rendra pas le caractère visible dans le champ de saisie (du moins, c'est ce que je voyais). De plus, les solutions précédentes ne prennent pas en compte la position actuelle du curseur et la sélection de texte dans le champ de saisie. Je devais utiliser une merveilleuse bibliothèque jquery-selection .

J'ai un clavier numérique personnalisé à l'écran qui remplit plusieurs champs de saisie. J'ai dû...

  1. Sur le focus, enregistrer le lastFocus.element
  2. En cas de flou, enregistrez la sélection de texte actuelle (début et fin)

    var pos = element.selection('getPos')
    lastFocus.pos = { start: pos.start, end: pos.end}
    
  3. Lorsque vous appuyez sur un bouton du clavier my:

    lastFocus.element.selection( 'setPos', lastFocus.pos)
    lastFocus.element.selection( 'replace', {text: myKeyPadChar, caret: 'end'})
    
0
Flint O'Brien