2011-08-01 150 views
1

嗨我试着检查一个表单中的标题是否已经存在于数据库中。

我的代码执行$ .post并取回数据,但不会停止使用e.preventDefault();或者返回false。 e.preventDefault();当标题为空时工作。

$(document).ready(function() { 
     $('input[id$=btnSubmit]').click(function(e) { 
       var title = $("#title").val(); 
       if (!title) { 
        alert('Please Add a title'); 
        return false ; 
        e.preventDefault(); 
       } else { 
        $.post("http://xendesktop.nl/uploader/checktitle.php",{ title:$(this).val() } ,function(data) { 
         if(data=='exists') { 
          alert('This title already exists'); 
          e.preventDefault(); 
         } 
        }); 
       } 
       var description = $("#description").val(); 
       if (!description) { 
        alert('Please Add a description'); 
        return false ; 
        e.preventDefault(); 
       } 

回答

0

return false;等同于BOTH防止冒泡并防止默认值。

既不应该在AJAX回调 - 该函数被调用的点击回调之外。

1

$.post请求异步发生,所以按钮的默认动作并没有被阻止,直到服务器发回它的响应(这不会在时间上发生) - 或者说,执行流过了那个点,其余的处理程序被执行,导致表单提交。

+0

那么如何防止呢? – xendesktop

+0

我会在处理程序开始时阻止默认值,并且只有当我们有条件时才手动触发提交,例如'$(this).closest(“form”)。submit()'。这将需要一点重构,但最终会得到一个更简洁,更简洁的解决方案。 – karim79