我在jQuery中使用表单提交事件时遇到了麻烦。
<form>
<input type="text" name="username" />
<a id="btn_submit">Submit</a>
<input type="submit" />
</form>
function valid() { return false; }
$('form').submit(function() {
if(!valid()) {
return false;
}
});
然后,当我点击<input type="submit" />
时,它会触发该事件,并可以取消提交事件。
但是当我在.btn_submit
标签上触发表单提交时,return false无法取消提交。
$('#btn_submit').click(function() {
$('form').submit();
// $('form').trigger('submit');
// document.forms[0].submit();
});
所以,现在问题是,如果我必须使用a.btn_submit
来触发表单的提交,我想取消该提交以防万一。
请帮忙!
我做了一个小提琴http://jsfiddle.net/69wcduv5/2/。
但它似乎无法在jsfiddle中提交。
我可以在表单中创建一个提交输入,然后触发点击它。然后将其删除。
如果我以这种方式触发提交,我的行为与我预期的完全相同:
$('form').submit(function() {});
内的验证码无需更改。 <input type="text" required />
之类的内容,则可以很好地使用。<input type="submit" />
感谢大家的耐心,最诚挚的问候。
希望有更好的解决方案。
答案 0 :(得分:1)
$("a.btn_submit").click(function(){
if($('form').valid())
{
$('form').submit();
}
});
答案 1 :(得分:1)
$('form').submit(function(event) {
if(!valid()) {
event.preventDefault();
}
});
答案 2 :(得分:1)
我现在明白你想要实现的目标,所以请忽略我之前写的内容。
formElement.submit()
及其jQuery等效非常故意不会触发onsumbit事件。否则,存在无限递归的可能性。
因此,无法执行$('form').submit();
并希望onsubmit处理程序可以拦截。
你最好的选择可能是你的&#34;脏&#34;理念。即触发点击(隐藏)type="submit"
按钮。
答案 3 :(得分:1)
使用链接提交表单似乎很奇怪,但问题是您没有取消锚点上的点击操作。
$('.btn_submit').on("click", function(evt) {
evt.preventDefault();
$('form').submit();
});
答案 4 :(得分:1)
以这种方式致电提交,最接近我的意图:
$.fn.natural_submit = function() {
if($(this).is('form')) {
var $form = $(this);
var $input_submit = $('<input type="submit" />').hide().appendTo($form);
$input_submit.trigger('click');
$input_submit.remove();
}
}
$('#btn_submit').click(function() {
$('form').natural_submit();
});