2009-09-06 4 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); 

Я хочу сделать func бежать, если размытие или нажатие «Enter» на нем. Но приведенный выше код работает только при размытии, в случае нажатия «Enter», он сообщает «Разрешение отказывается для доступа к parentNode».Как сделать следующий фрагмент jQuery?

Хотя я знаю, что это связано с ключевыми словами this в разных контекстах, я не знаю, как это исправить.

ответ

1

Вы вызываете func, с нормальным вызовом функции, что вызывает внутри func, переменная this будет ссылаться на глобальный объект (окно).

Вы должны выполнить эту функцию с call, в целях сохранения контекста (значение 'this'), который является элементом, который вызвал событие:

$("#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

Это near.But я назвал $ (this) .select(), и после нажатия «Enter» значение ввода очищается, как предотвратить это? – omg

+0

вы можете отменить распространение события keyup ... отредактировано ... – CMS

+0

Не работает, я думаю, функция keyup вызывается после поведения по умолчанию. – omg

-1

Попробуйте это:

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)); 
}); 
Смежные вопросы