2013-01-04 82 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