我目前正在开发一个带有ajax的小评论系统。我想在按下回车键时取消绑定按键事件(以避免重复注释)并在成功调用ajax后重新绑定它。
jQuery(".commentDiv textarea").keypress(function(event) {
if(event.which == 13 && !event.shiftKey) {
event.preventDefault();
var textarea = jQuery(this);
var comment = jQuery.trim(textarea.val());
if (!comment.length) {
alert("No valid comment.");
return false;
}
var the_data =
{
...
};
textarea.attr( "disabled", "disabled" );
textarea.val("Saving comment. Please wait...");
textarea.off('keypress.disabled');
// or textarea.unbind('keypress'); which also works
jQuery.post(ajaxurl, the_data, function(sp_response) {
textarea.attr( "disabled", false);
textarea.val("");
textarea.on('keypress.disabled', false); // not working
});
}
});
keypress.disabled
代码来自How to bind, unbind and rebind (click) events in JQuery。
将keypress事件重新绑定到元素的最简单方法是什么?
答案 0 :(得分:2)
而不是绑定和取消绑定只需使用标志来跳过不想要的执行。在事件开始时设置变量值,并在回调后重置它以为下一个事件做好准备。
var isAlreadyPressed = false;
jQuery(".commentDiv textarea").keypress(function(event) {
if(isAlreadyPressed) return;
isAlreadyPressed = true;
...
...
jQuery.post(ajaxurl, the_data, function(sp_response) {
isAlreadyPressed = false;
//your code here
});