2013-01-04 81 views
1

我正在使用表單提交驗證jqtransformed項目。奇怪的是提交控制只能工作一次。如果我在第一次嘗試中提交表單正確,它會發送該值。但如果我不這樣做,它會提醒我,永遠不會再提交。jQuery防止默認表單提交第二次出錯

這是我的示例工作。

function jqkontrol(){ 
    var alis = jQuery("#alis_yeri div.jqTransformSelectWrapper span").text(); 
    var donus = jQuery("#donus_yeri div.jqTransformSelectWrapper span").text(); 
    if(alis!='Alış Yeri Seçiniz' && donus!='Dönüş Yeri Seçiniz'){ 
     jQuery("form#rezervasyon").submit(); 
     return true; 
    }else{ 
     alert('Alış noktası seçiniz.'); 
     jQuery("form#rezervasyon").submit(function (e) { 
      e.preventDefault(); 
     }); 
     return false; 
    }; 
} 

<form> 
<input type="image" src="http://www.guiderentacar.com/yeni/tema/bg_devamet.png" onclick="jqkontrol();" /> 
</form> 

下面是現場版:Live Demo of the Source.

回答

3

這個代碼在這裏:

jQuery("form#rezervasyon").submit(function (e) { 
     e.preventDefault(); 
    }); 

建立了表單上的 「提交」 事件的事件處理程序。處理程序是永久的;好吧,它是永久的,直到你明確地拿走它,而你沒有。因此,如果你有錯誤,你建立了這個處理程序,然後從那時起,你將永遠無法提交表單;該處理程序將始終阻止默認操作。

而是這樣做的,做了以下(我認爲):

  1. 改變 「onclick」 事件處理程序提交圖片:

    <input type="image" src="http://www.guiderentacar.com/yeni/tema/bg_devamet.png" onclick="jqkontrol(event);" /> 
    
  2. 更改驗證碼:

    function jqkontrol(ev){ 
        ev = ev || window.event; // for IE 
        var alis = jQuery("#alis_yeri div.jqTransformSelectWrapper span").text(); 
        var donus = jQuery("#donus_yeri div.jqTransformSelectWrapper span").text(); 
        if(alis!='Alış Yeri Seçiniz' && donus!='Dönüş Yeri Seçiniz'){ 
         return true; 
        }else{ 
         alert('Alış noktası seçiniz.'); 
         if (ev.preventDefault) ev.preventDefault(); 
         ev.returnValue = false; // for old IE 
        }; 
    } 
    
+0

因此:解除提交事件在提交表單之前清除preventDefault()。 – JNDPNT

+0

@JNDPNT首先,沒有必要綁定事件處理程序。 – Pointy

+0

謝謝,這解決了我的問題。我不知道我綁定,永久阻止行動。 – Mustafa