我让自己混淆了这个jQuery代码,所以我希望有人可以提供帮助! 要解释:用户单击链接,将阻止默认操作。进行AJAX调用以创建具有文本输入字段的表单,该字段被赋予焦点。在一个简单的情况下,当用户远离字段时,提交表单并在服务器端进行重定向。我正在尝试取消取消功能。我希望用户能够重新单击原始链接以删除文本输入并停止提交表单。目前,虽然删除了输入字段,但仍然提交了表单,大概是因为焦点已从中删除。
我意识到我不能使用toggle()方法,因为我需要能够绑定live(),因为创建了新的元素。
有什么想法吗?!
$('.add_tag').live('click', function(e){
e.preventDefault();
$.post($.baseurl+'messages/add_tag', function(data) {
$('.user_tags ul').prepend(data).hide().slideDown();
$('#new_tag').focus();
$('.add_tag').click( function(e){
e.preventDefault();
if($('#new_tag').is(':visible')) {
// remove it
$('#new_tag').slideUp().remove();
}
return false;
});
// when the focus moves, automatically add the tag
$('#new_tag').blur(function(){
// send the data to be processed
$('form[name="add_tag"]').submit();
});
});
});
答案 0 :(得分:0)
在取消按钮的点击操作之前,文本框将失去焦点。因此,取消提交为时已晚。解决这个问题的一种方法是稍微延迟提交,然后在实际提交之前检查取消标记。像这样(未经测试):
var submitCanceled=false;
$('#new_tag').blur(function(){
setTimeout(function(){
// send the data to be processed
if(!submitCanceled){
$('form[name="add_tag"]').submit();
}
submitCanceled=false;
},1000);
});
$('#cancel_button').click(function(){
// ...
stubmitCanceled=true;
// ...
});