2016-07-06 90 views
0

我有这个jQuery函数注入每个页面,以便在点击后禁用提交按钮。Javascript返回false;没有取消表单提交另一个。提交jQuery调用

$('form').submit(function() { 
     var btn = $('input[type=submit]', this); 
     disableButtonOrLink.disableSubmit(btn); 

     btn = $('button[type=submit]', this); 
     disableButtonOrLink.disableSubmit(btn); 
    }); 

的问题是,我也有,有时附着于形式的东西形状像这样

<form action="someAction" method="post" name="someForm" class="form" 
    onsubmit="var invalid=false; 
    invalid=someAction(); 
    if(invalid){return false;}" 
    id="someForm"> 

我有这是问题出现了一些后端验证的是, ('form')。提交动作总是在返回false后被调用。由于返回错误,表单实际上并未提交;然而这个jQuery函数仍然在被调用之后。无论如何阻止这个.submit被称为?

只是为了澄清到底发生了什么: 形式对onsubmit被调用;

返回虚假部分正在被击中并正确取消提交;

的(“形式”)。递交仍然被称为的onsubmit完成后,就好像表单提交并没有取消,并禁止按钮。

我想阻止发生最后一步。

回答

0

您可以使用jQuery里面找form这些按钮从防止东西,他们通常做用的方法。
例子:
$("form button").on('click', function(e){ e.preventDefault(); });

+0

究竟做了preventDefault()方法做/停止的发生??? – mcgray

+0

在我的例子中,它获取了'form'中的每个'button'元素。 e.preventDefault()停止默认的动作,例如表单中的按钮,它不会发送它。 #Edit - 实际上,它会更清楚,如果我会赶上'input'型submit'的' - 在这种情况下,默认操作提交表单 – Krizzu

+0

是否有在的onsubmit部分使用.preventDefault()的方式如果它是用html写的? I.E.的onsubmit =“something.preventDefault()”作为this.preventDefault()似乎并不奏效 – mcgray

0

我可能会尝试这样

$('#someForm').on('submit', function(e) { 
    if ($(this).data('some-action')) { 
     e.preventDefault(); 
     return false; 
    } 
    //... then disable buttons, etc 
}); 

在这种情况下,你需要的属性data-some-action添加到形式,无论后端验证你正在做的事情进行评估。

UPDATE

$('#someForm').on('submit', function(e) { 
    if ($(this).data('some-action') == 'error-message') { 
     e.preventDefault(); 
     alert('error!'); 
     return false; 
    } 
    if ($(this).data('some-action') == 'reload') { 
     e.preventDefault(); 
     document.location.reload(true); 
    } 
    //... then disable buttons, etc 
}); 
+0

所以基本上设置窗体上的属性在返回false之前;这表明它是否有效,然后可以在提交jQuery中评估它,以确定它是否应该禁用按钮。 – mcgray

+0

上面的代码我相信你可以跳过整个'onsubmit =“var invalid = false; invalid = someAction(); if(invalid){return false;}”'只是删除它。添加,而不是'data-some-action =“”'根据您是否要提交表单评估真或假 –

+0

我有点像这个想法,但行为改变页面到页面如何处理无效提交(任何地方从渲染错误信息到重新渲染整个页面)。不幸的是,这个解决方案不会让我保持每个验证动作的独特性。 – mcgray