2012-03-27 90 views
3

我编码,jQuery的全球迷你表格验证。这里; 此代码,所有表单提交事件侦听器。jquery多次提交事件

$('form').submit(function() { 
     var returnfalse = 'true'; 
     var min; 
     var maxlength; 

     $('input[type=text], input[type=password]', this).removeClass('error'); 

     jQuery.each($('input[type=text], input[type=password]', this) , function() { 


      min = $(this).attr('min'); 
      maxlength = $(this).attr('maxlength'); 
      inputValue = $(this).val().trim(); 



      if($(this).attr('min') != '' && $(this).attr('min') != null && inputValue.length < min) { 
       alert('ERROR !!!!!') 
       $(this).addClass('error'); 
       $(this).focus(); 
       returnfalse = 'false'; 
      } 



      if(returnfalse != 'true') 
       return false; 


     }); 

     if(returnfalse != 'true') 
      return false; 

    }); 

等提交事件;

$('#registerForm').submit(function(){ 
    alert('this Work...'); 
}); 

这两个事件的作品,当我#registerForm提交。但是我写上面的事件返回false。

为什么它在第二个事件中起作用?

+0

您的'returnfalse',没有在您发布的代码中的任何地方定义? – 2012-03-27 08:11:05

+0

Ahhg。对不起,我忘了写。 'var returnfalse'上面。 – s3yfullah 2012-03-27 08:19:15

回答

4

2考虑:

1),你应该(在事件),以防止警报(http://jsfiddle.net/R7uwa/)(如果我remeber正确返回false等于.preventDefault()调用stopImmediatePropagation和stopPropagation()因此,没有警报。在这种情况下:在这种方式绑定

$('form').submit(function(e){ 
    e.stopImmediatePropagation(); 
    return false; 
}); 


$('form').submit(function(){ 
    alert('hi'); 
}); 

2)活动在您绑定的顺序执行,所以你应该先绑定您的验证,以便停止传播作品(http://jsfiddle.net/R7uwa/1/)。但如果你看看这个问题jQuery event handlers always execute in order they were bound - any way around this?你可以看到有一个解决方法。

在这种情况下,你会甲肝警报

$('form').submit(function(){ 
    alert('hi'); 
}); 


$('form').submit(function(e){ 
    e.stopImmediatePropagation(); 
    return false; 
}); 
+0

谢谢,它工作... – s3yfullah 2012-03-27 09:45:18

0

return false基本上防止在jQuery的事件的默认浏览器的行为。

在第一个代码示例中,return false将确保避免默认浏览器的表单提交操作,但它不会避免在单个事件中调用多个方法。

由于您在单一表单提交事件上绑定了两个方法,因此它将一个接一个地调用两个方法,并且第一个方法将确保避免浏览器的默认提交操作。