从 jQuery 验证中动态删除 submitHandler,以允许正常的PayPal“捐赠”按钮操作
Dynamically remove submitHandler from jQuery Validate to allow normal PayPal 'donate' button action
我必须在 AngularJS 捐赠表单的中间添加一个PayPal捐赠按钮,以便将PayPal生成的表单标签嵌套在捐赠表单标签中。
捐赠表单由旧版本(1.12(的jQuery Validate处理,因此无法访问.rules()
函数。
我找到了一种通过这个答案验证要求的方法(下面注释掉了代码(,但问题是 submitHandler 采用"form"的参数,它始终是父表单元素(完整的捐赠表单(。
理想情况下,我想在选择PayPal后一起禁用 jQuery 验证。
这是当用户选择"信用卡"与"PayPal"时我调用的函数,并且在选择PayPal时它正确地进入其他函数。
$scope.payByCreditCard= function(cc_true) {
if(cc_true){
$scope.creditCardDetails = true;
$scope.submit_text = "Submit Donation";
$scope.method_type = "donate";
} else {
$scope.creditCardDetails = false;
$scope.submit_text = "Continue Donation on Paypal";
$scope.method_type = "startDonation";
// var settings = $('#donationForm').validate().settings;
// delete settings.rules;
// $("*").removeClass("required");
}
};
以及带有提交处理程序的 jQuery 验证调用:
$('#donationForm').validate({
rules: {
otherDonationAmount: {
money: true,
required : true
}
},
errorPlacement : function(error, element) {
if (element.attr('id') == 'donationAmount') {
error.insertAfter(element.parent());
} else {
error.insertAfter(element);
}
},
submitHandler: function(form) {
$('#donation-errors').remove();
window.scrollTo(0, 0);
$("#donationForm").hide();
$("#donationForm").before('<div class="well donation-loading" style="text-align:center;">' +
This may take a few seconds. Do not leave the page or click the back button.' + '</div>');
}
});
发生的事情是我禁用了验证,但是当我单击PayPal捐赠按钮时,submitHandler 函数被触发,它尝试处理整个捐赠表单,而不是遵循PayPal生成的代码中的内容:
<form action="https://www.paypal.com/xxx/xxx" method="post" target="_top">
<input type="hidden" name="" value="">
<input type="hidden" name="" value="">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
因此,我正在寻找一种方法来禁用jQuery验证作为验证器和提交处理程序,如果满足条件(用户选择PayPal(。
引用 OP:
"...将PayPal生成的表单标签嵌套在捐赠表单标签中。
这是完全无效的HTML,这是一个非常糟糕的主意。我会放弃任何将<form></form>
容器放置在<form></form>
容器中的设计。
引用 OP:
"捐赠表格由旧版本(1.12(的jQuery Validate处理,因此无法访问
.rules()
功能。
那不是真的。.rules()
方法可以追溯到许多版本/年份,包括 1.12,它仅比最新版本 (1.13( 晚一个版本。
引用 OP:
"...当我单击PayPal捐赠按钮时,submitHandler 函数被触发,它会尝试处理整个捐赠表单,而不是遵循PayPal生成的代码中的内容">
当然有。您的HTML完全无效,因此会发生各种意想不到的事情。
引用 OP:
"理想情况下,我想在选择PayPal后一起禁用jQuery验证。...因此,我正在寻找一种方法来禁用jQuery验证作为验证器,并在满足条件时
submitHandler
(用户选择PayPal(。
在表单上初始化后,您将无法切换或禁用 jQuery 验证插件、.validate()
方法或其任何选项(包括 submitHandler
(。这是没有任何解决方法的绝对限制。
开发人员唯一允许您"动态"做的事情是......
-
使用
.rules('add')
和.rules('remove')
方法添加/删除某些规则。(是的,这些方法在几年前的所有插件版本中都可用,包括 v1.12( -
还可以使用
depends
属性切换某些布尔规则。 -
如果切换字段的可见性,则也会切换对该字段的验证功能。
为什么你不能只拥有两个完全独立和独立的表单,每个表单都有自己的动作、规则等,然后使用 jQuery 动态显示你需要的表单?默认情况下,jQuery Validate 插件将自动忽略任何隐藏的表单和字段。
- Javascript.getHours()工作不正常
- 正在尝试使用if和else添加类,但无法正常工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- javascript扫雷器floodfill算法不能正常工作
- 我的shareService在angular 2中发送值工作正常,但当我渲染我的另一个组件时,会获得默认值
- ng隐藏和ng显示无法正常工作
- 咖啡的Javascript订单总数无法使函数正常工作.请协助
- removeClass函数没有'工作不正常
- jQuery Ajax GET请求工作不正常
- navigation和navigateByUrl在2.0.0-rc.1上的ngOnInit中无法正常工作
- html5画布动画无法正常工作
- JS在firefox中无法正常工作
- jQuery选择器无法正常工作
- Cordova ng路线工作不正常
- 无法获取文档.GetElementById工作正常
- 菜单栏class=活动引导程序主题无法正常工作
- 使用PHP和ajax传递URL不太正常的变量
- OnsenUI AngularJS数据绑定无法正常工作
- 用javascript创建一个看起来正常分布的模式
- 从 jQuery 验证中动态删除 submitHandler,以允许正常的PayPal“捐赠”按钮操作