使用JavaScript将表单提交到两个不同的位置,然后使用jQuery进行验证
我有一个名为使用JavaScript将表单提交到两个不同的位置,然后使用jQuery进行验证,jquery,jquery-validate,Jquery,Jquery Validate,我有一个名为#summaryforms的表单,用户可以现在预订或以后预订 这是我的按钮: <div class="bookingbuttondiv"> <input type="hidden" name="bookingid" value="<?php echo $bookingid; ?>" /> <input type="button" class="button" value="Book Now" onClick="this.form.
#summaryforms
的表单,用户可以现在预订或以后预订
这是我的按钮:
<div class="bookingbuttondiv">
<input type="hidden" name="bookingid" value="<?php echo $bookingid; ?>" />
<input type="button" class="button" value="Book Now" onClick="this.form.action='payment.php';this.form.submit()">
<input type="button" class="button" value="Book Later" onClick="this.form.action='poa.php';this.form.submit()"><br/><br/>
</div>
它不起作用,而且我没有收到任何错误,我怀疑这是因为它在调用jQuery之前提交,有没有办法解决这个问题,同时仍然保持提交到两个不同位置的选项?当然。您希望“捕获”正常提交,防止其发生,然后执行验证
要阻止表单提交,请确保它有一个ID(看起来是这样的),并使用以下内容:
// on DOM load...
jQuery(function () {
// attach a handler to the SUBMIT of your form
jQuery('#summaryforms').submit( function () {
// do validation or whatever, and if it passes, return true
// to submit
if (myFormIsValid) {
return true;
}
// otherwise, prevent it from submitting "normally"
return false;
});
});
问题在于将javascript和jQuery结合起来。一般来说,javascript优先于jQuery。如果你这样做,像IE这样的浏览器会产生意想不到的结果。并尝试如下: 编辑的脚本: 在jQuery中
$(document).ready(function(){
$("#summaryforms").validate();
$("#summaryforms input.button").click(function(e){
var action = '';
if($(e.target).val() === 'Book Now'){
action = 'payment.php';
}else if($(e.target).val() === 'Book Later'){
action = 'poa.php';
}
$("#summaryforms").attr('action', action);
$("#summaryforms").submit();
})
});
在HTML中
<div class="bookingbuttondiv">
<input type="hidden" name="bookingid" value="<?php echo $bookingid; ?>" />
<input name="booknw" type="button" class="button" value="Book Now" >
<input name="booklater" type="button" class="button" value="Book Later" ><br/><br/>
</div>
从按钮
元素中删除内联onClick
处理程序。您使用的是jQuery,它不需要任何内联JavaScript。其次,由于jqueryvalidate插件已经内置了submit
事件处理程序,因此您需要将按钮放置在
之外,并分别捕获它们的单击事件
我删除了内联onclick
处理程序,并添加了id
属性。我还使用/>
自动关闭了您的输入
标记
HTML:
<form id="summaryforms">
...
</form>
<div class="bookingbuttondiv">
<input type="hidden" name="bookingid" value="<?php echo $bookingid; ?>" />
<input type="button" class="button" value="Book Now" id="now" />
<input type="button" class="button" value="Book Later" id="later" />
</div>
$(document).ready(function() {
$('.button').each(function () {
$(this).on('click', function () {
var action;
if ($(this).attr('id') == "now") {
action = 'payment.php';
} else {
action = 'poa.php';
}
$('#summaryforms').attr('action', action).submit();
});
});
$('#summaryforms').validate({ // initialize the plugin
// any options and/or rules
});
});
演示:
编辑:
<form id="summaryforms">
...
</form>
<div class="bookingbuttondiv">
<input type="hidden" name="bookingid" value="<?php echo $bookingid; ?>" />
<input type="button" class="button" value="Book Now" id="now" />
<input type="button" class="button" value="Book Later" id="later" />
</div>
$(document).ready(function() {
$('.button').each(function () {
$(this).on('click', function () {
var action;
if ($(this).attr('id') == "now") {
action = 'payment.php';
} else {
action = 'poa.php';
}
$('#summaryforms').attr('action', action).submit();
});
});
$('#summaryforms').validate({ // initialize the plugin
// any options and/or rules
});
});
引用OP:
<form id="summaryforms">
...
</form>
<div class="bookingbuttondiv">
<input type="hidden" name="bookingid" value="<?php echo $bookingid; ?>" />
<input type="button" class="button" value="Book Now" id="now" />
<input type="button" class="button" value="Book Later" id="later" />
</div>
$(document).ready(function() {
$('.button').each(function () {
$(this).on('click', function () {
var action;
if ($(this).attr('id') == "now") {
action = 'payment.php';
} else {
action = 'poa.php';
}
$('#summaryforms').attr('action', action).submit();
});
});
$('#summaryforms').validate({ // initialize the plugin
// any options and/or rules
});
});
“…我怀疑这是因为它在调用jQuery之前提交…”
不应该。调用submit()
只应触发验证,因为插件内置了submit
事件侦听器。您的代码中可能还有另一个问题,您没有在OP中向我们展示。可能是您如何定义规则的问题。另外,您的id
是summaryforms
;为什么是复数id
应该是唯一的,如果您在共享id=“summaryforms”
的页面上有多个表单或任何元素,则会导致问题
按照我上面的工作代码和JSFIDLE演示作为您的模型,如果您遇到问题,可以提问。我想是因为OP使用的是jQuery,而您仍然有内联的onClick
处理程序。此外,也不需要在form.submit()中使用submitHandler
。。。这已经是插件的默认行为了。@Sparky我已经编辑了我的帖子。您对内联脚本的期望有点误解。我希望编辑后的文章能给我们一些想法。你们可能需要给我们展示更多的代码。您如何定义插件的规则?另外,您的id
是summaryforms
;为什么是复数id
应该是唯一的,如果页面上有多个带有id=“summaryforms”
的元素,这将导致问题。if(myFormIsValid).
~这有点忽略了验证插件的全部要点。