2012-07-30 1 views
1

J'essaye de créer un dialogue modal très minimal et simple qui affiche juste une zone de texte.jQuery BlockUI: Est-il possible d'exécuter une fonction après qu'un utilisateur a appuyé sur la touche "Entrée"?

Objectifs:

  • Si l'utilisateur appuie sur la touche « esc », il disparaitra (et l'entrée de texte est ignoré)
  • Si les entrées utilisateur texte et frappe la touche « Entrée », une fonction qui prend l'entrée est exécutée (appelée "postText (userinput)")

Je me demande si je peux utiliser jQuery BlockUI: http://malsup.com/jquery/block/#demos.

Cependant, je ne suis pas sûr de savoir comment fermer réellement une boîte de dialogue basée sur esc, ou exécuter une fonction si l'utilisateur tape Entrée.

Toute aide serait grandement appréciée!

Répondre

4

Essayez quelque chose comme ça;

$('#txtValue').keyup(function(e) { 
    e.preventDefault(); 

    if (e.keyCode === 13) { 
     // The Enter key was pressed 
     postText($(this).val()); 
    } 
}); 

Vous devriez jamais comment utiliser l'événement form.submit au lieu d'écouter de la clé enter.

if (e.keyCode === 27) { 
    // The Esc key was pressed 
    $('#dialog').hide(); 
} 

Voir également ces informations pour plus d'informations;

https://stackoverflow.com/search?q=javascript+esc+key

https://stackoverflow.com/search?q=javascript+enter+key

4

dialogue Fermer le ESC, il suffit d'ajouter un auditeur keyup-document et appeler $.unblockUI si le code clé est égale à 27.

​​$(document).on('keyup', ​​​function(e) { 
    if (e.which === 27) { // Escape key 
    $.unblockUI(); 
    } 
});​ 

Pour la forme, il suffit d'ajouter un écouteur d'événement dans le champ d'entrée dans la boîte de dialogue. C'est fondamentalement la même chose.

​​$('#the-input').on('keyup', ​​​function(e) { 
    if (e.which === 13) { // Enter key 
    // AJAX maybe? 
    $.post('your/url', { data: $(this).val() }, function(response) { 
     $.unblockUI();    
    }); 
    } 
});​ 

Modifier

Vous affectez ces auditeurs après le DOM a été chargé. Ainsi, votre fichier de script chargé contiendra:

$(document).ready(function() { 
    // Code from the two listings above here 

    // Trigger blockUI by click on an link for example 
    $('a').on('click', function(e) { 
     e.preventDefault(); 

     $.blockUI({ message: $('#your-form') }); 
    }); 
}); 
+0

merci! Je suis désolé si c'est une question stupide, mais quelle est la différence entre # l'entrée et # votre-forme. J'ai un div avec id votre-forme avec le champ de saisie. quel est le but de # l'entrée? – tonic

+0

'# the-input' devrait être l'id assigné à votre champ de saisie de texte que vous voulez envoyer sur enter. '# votre-forme' devrait être l'identifiant attribué à votre élément'

'. Passer '$ ('# votre-forme')' à blockUI devrait afficher tout le formulaire dans le modal. – mAu

+0

a du sens, merci! – tonic

1

javascript:

("#yourInput").keyup(function(e){ 
    switch (e.keyCode) { 
    case 13: # enter 
    # logic 
    case 27: # esc 
    # logic 
    } 
}) 
+0

hm, je ne sais pas où j'ai réellement mis ce code. est-il en quelque sorte intégré dans l'appel $ .blockUI? Je vous remercie! – tonic

+0

Voir ma réponse. Vous affectez ces écouteurs après le chargement du DOM. – mAu

Questions connexes