2009-09-06 7 views
0
var func = function() 
{ 
    $(this).hide(); 
    $parent = $(this).parent(); 
    $parent.removeClass('my_signature_mouseover'); 
    var text = $(this).val(); 
    var $span = $("#status span"); 
    $span.text(text); 
    $span.show(); 
}; 
$("#status input").keyup(function (e) { 
    var keyCode = e.keyCode || e.which; 
    if (keyCode == 13) { 
     func(); 
    } 
}).blur(func); 

Je veux faire func courir si flou ou en appuyant sur "Entrée" sur elle. Mais le code ci-dessus ne fonctionne que lorsque flou, dans le cas d'appuyer sur "Entrée", il signale "Autorisation refusée pour accéder à ParentNode".Comment faire fonctionner l'extrait jQuery suivant?

Bien que je sais que c'est quelque chose en rapport avec this mot-clé dans un contexte différent, je ne sais pas comment y remédier.

Répondre

1

Vous appelez le func, avec un appel de fonction, qui provoque l'intérieur func, la variable this fera référence à l'objet global (fenêtre).

Vous devez exécuter la fonction avec call, afin de préserver le contexte (la valeur 'this'), qui est l'élément qui a déclenché l'événement:

$("#status input").keyup(function (e) { 
    var keyCode = e.keyCode || e.which; 
    if (keyCode == 13) { 
     e.preventDefault(); // stop event propagation 
     func.call(this); 
    } 
}).blur(func); 
+0

Il est near.But J'ai appelé $ (this) .select() d'abord, et après avoir appuyé sur "Entrée", la valeur de l'entrée est effacée, comment empêcher cela de se produire? – omg

+0

vous pourriez vouloir annuler la propagation de l'événement keyup ... édité ... – CMS

+0

Ne fonctionnant pas, je devine que la fonction keyup est appelée après le comportement par défaut. – omg

-1

Essayez ceci:

var func = function(elem) 
{ 
    elem.hide(); 
    var $parent = elem.parent(); 
    $parent.removeClass('my_signature_mouseover'); 
    var text = elem.val(); 
    var $span = $("#status span"); 
    $span.text(text); 
    $span.show(); 
}; 
$("#status input").keyup(function (e) { 
    var keyCode = e.keyCode || e.which; 
    if (keyCode == 13) { 
     func($(this)); 
    } 
}).blur(function() { 
    func($(this)); 
});