2012-03-27 123 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將確保避免默認瀏覽器的表單提交操作,但它不會避免在單個事件中調用多個方法。

由於您在單一表單提交事件上綁定了兩個方法,因此它將一個接一個地調用兩個方法,並且第一個方法將確保避免瀏覽器的默認提交操作。