2016-05-05 4 views
2

У меня есть следующий кодJQuery: нажатие обработчик отмены события

jQuery('#parent').on('keypress', '.textbox', function(e) { 
    var btn = jQuery(this).closest('tr').find('.btn'); 
    if (btn.length) { 
     btn.triggerHandler('click'); 
    } 
}); 

Этот код является делегированы обработчик, который нажатие слушает случае текстовых, имеющих значение класса «.textbox». Обработчик находит кнопку с классом «.btn» & вызывает свой обработчик кликов, который имеет в нем вызов ajax.

Проблема заключается в том, что это предотвращает выполнение события, т. Е. Если значение в поле «2» & Я набираю «3», обработчик выполняет, но значение в поле остается «2» вместо «23».

Он работает нормально, когда я комментирую инструкцию btn triggerHandler.

Идеи, почему это происходит?

Спасибо.

+2

Используйте 'keyup' вместо' keypress' – Bhumika107

+0

может быть, вы можете использовать btn.trigger ("щелчок") – Grommy

+0

@Grommy это то же самое для '.trigger',' triggerHandler' и '.click()'. –

ответ

1

Использование keyup вместо keypress. Как и в вашем скрипте, вы активировали другое событие.

jQuery('#parent').on('keyup', '.textbox', function(e) { 
    var btn = jQuery(this).closest('tr').find('.btn'); 
    if (btn.length) { 
    btn.triggerHandler('click'); 
    } 
}); 

keypress прерывается на triggerHandler и, следовательно, не позволяет происходить действие по умолчанию нажатием клавиши. В то время как keyup сначала выполнит действие по умолчанию, а затем прослушает обработчик.

+0

нужно знать больше о поведении события.Я ожидал, что оба они будут работать одинаково. –

+0

Все еще не могу понять, почему 'keyup' нарушается, но' keypress' делает..что бы это было, если это было 'keydown',' mouseleave' или какое-то другое событие? –

+0

Вы пытались использовать 'trigger' вместо' triggerHandler'? Посмотрите это - http://stackoverflow.com/a/3772559/4719761 'triggerHandler' предотвращает цепочку событий – Bhumika107

0

Я думаю, что вам нужна функция блокировки.

$(document).ready(function(){ 
 
    $("input").keyup(function(){ 
 
var rs= $(this).val(); 
 
    alert(rs); 
 
     $("input").css("background-color", "pink"); 
 
    }); 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
 
Enter your value: <input type="text">

+0

Я хотел знать, почему keypress отменяется, но keyup does not? –

+0

Нажатие клавиши только при нажатии любой клавиши и при нажатии клавиши на клавиатуре –

+0

Я понимаю это, но это не касается стрельбы. Keypress & Keyup оба из них запускаются здесь, но Keypress не завершается. т.е. введенное значение не отображается в текстовом поле. –

0

Попробуйте использовать 'OnChange' InstEd из 'нажатием клавиши' или '' KeyUp

$(document).ready(function(){ 
    $("input").onchange(function(){ 
    var rs= $(this).val(); 
    alert(rs); 
    $("input").css("background-color", "pink"); 
    }); 
}); 
+0

На мой вопрос было, почему keypress не завершается, но keyup делает? –

+0

keypress работает, когда вы запускаете его, чтобы поднять событие до того, как значение не будет введено в текстовое поле до тех пор, но keyup поднимет событие после ввода значения в текстовое поле. но если вы хотите написать строку или слово keup raise event в каждой буквенной клавиатуре и событии обмена onchange после ввода целого значения при изменении. –

+0

да это правильно несколько ... но почему Keypress вообще отменяется в моем случае? Должна быть точка его завершения, где символ должен быть вставлен в поле ввода. –

Смежные вопросы