Javascript `$(函数`提交按钮后未被调用
我正在使用stripe.js学习定制支付,我正在使用.net MVC创建一个简单的网站来处理支付。我对webdev是相当陌生的,我一辈子都不明白为什么在单击submit按钮后没有调用这个js函数,我现在正在将令牌放入ViewBag中,这样我就可以查看数据了。进一步的上下文,我想在生成令牌客户端的同时处理令牌服务器端。我可能缺少一些简单的东西,但在这一点上,我已经尝试了我能找到的一切 这是我用来测试信用卡收费的代码。 这是一个部分cshtml文件,在输入数据时,通过调用Javascript `$(函数`提交按钮后未被调用,javascript,asp.net-mvc,asp.net-mvc-4,stripe-payments,Javascript,Asp.net Mvc,Asp.net Mvc 4,Stripe Payments,我正在使用stripe.js学习定制支付,我正在使用.net MVC创建一个简单的网站来处理支付。我对webdev是相当陌生的,我一辈子都不明白为什么在单击submit按钮后没有调用这个js函数,我现在正在将令牌放入ViewBag中,这样我就可以查看数据了。进一步的上下文,我想在生成令牌客户端的同时处理令牌服务器端。我可能缺少一些简单的东西,但在这一点上,我已经尝试了我能找到的一切 这是我用来测试信用卡收费的代码。 这是一个部分cshtml文件,在输入数据时,通过调用@Html.partial(
@Html.partial(“~/Views/Home/processors.cshtml”)
@使用System.Web.Mvc
@使用System.Web.Mvc.Html
@使用系统
@使用System.Web.UI
@模型依赖性\u注入\u MEF\u MVC.Models.Payment
Stripe.setPublishableKey('pk_test_rob8TRTyyRseiTwrqSmheKiZ');
$(函数(){
var$form=$(“#付款单”);
$form.submit(函数(事件){
//禁用“提交”按钮以防止重复单击:
$form.find('.submit').prop('disabled',true);
//从Stripe请求令牌:
Stripe.card.createToken($form,stripeResponseHandler);
//阻止提交表单:
返回false;
});
});
函数stripeResponseHandler(状态、响应){
//抓取表格:
var$form=$(“#付款单”);
if(response.error){//问题!
//在表单上显示错误:
$form.find('.payment errors').text(response.error.message);
$form.find('.submit').prop('disabled',false);//重新启用提交
}否则{//令牌已创建!
//获取令牌ID:
var token=response.id;
//将令牌ID插入表单,以便将其提交到服务器:
$form.append($('').val(标记));
//提交表格:
$form.get(0.submit();
}
};
会员金额:XX美元
卡号
有效期(年月日)
CVC
您的JavaScript在目标实际表单存在之前运行。您需要将其移动到表单HTML之后,或者更好,刚好在结束正文标记之前
更新
导致事件处理程序不被触发的唯一原因是:
$(body).on('submit', '#payment-form', function () {
这将允许您绑定到#支付表单
,即使它当前在页面上不存在,因为您实际上绑定到正文
,一旦事件出现,jQuery将直接转发到处理#支付表单
。但是,您不应该实际绑定到正文
。我只是这么做的因为这保证会起作用,但效率也很低。您应该选择绑定时存在的与您的支付表单最接近的父级(即,AJAX响应中不包含的内容)当您单击“提交”时,浏览器开发人员控制台中是否显示任何错误?不,它只是发布然后重置页面。我在这个局部视图之外还有另一个按钮,它也基于
id=Submit
进行发布。您认为这会是一个冲突吗?它不应该正确,因为这只涉及id=“付款表单”
自从var$form=$(“#支付表单”);
当您在浏览器调试器中设置断点时,调试器是否会一步一步地执行所有代码?我已经看到了在不运行代码的情况下提交的问题。您可以始终尝试。单击()
,只需执行$(“#formId”)。提交()
或其他一些我认为正在发生的事情,我仍然不熟悉在windows中使用调试器。Visual Studio中的调试器甚至没有达到这一点,因为在cshtml中进行JS调试可能是不可能的。好的,现在尝试一下,但我确信我以前已经尝试过。我会很快告诉你。谢谢!可能确实有潜在的问题还有其他需要进一步解决的问题,但是在表单存在之前运行JavaScript肯定是行不通的,所以这就是步骤1。不,除了发布和
$(body).on('submit', '#payment-form', function () {