Javascript 如何调用具有动态数据的onclick jquery函数,Asp.net Mvc5
我正在为每个循环加载使用的包,显然是从代码Javascript 如何调用具有动态数据的onclick jquery函数,Asp.net Mvc5,javascript,jquery,ajax,asp.net-mvc,razor,Javascript,Jquery,Ajax,Asp.net Mvc,Razor,我正在为每个循环加载使用的包,显然是从代码 <div class="row"> @foreach(var items in ViewBag.packages) { <div class="col-md-2"> <div class="price-table-area"> <div class="fixed-img sec-bg5"></div> &
<div class="row">
@foreach(var items in ViewBag.packages)
{
<div class="col-md-2">
<div class="price-table-area">
<div class="fixed-img sec-bg5"></div>
<ul class="proce-table">
<li class="price-prdct"><i>$</i>@items.NewPrice<i>/m</i></li>
<input type="submit" class="submit" value="SignUp" onclick="packageSelect(@ViewBag.PackageId)">
</ul>
</div>
</div>
}
</div>
剧本
<script>
function packageSelect(PackageId) {
$.ajax({
type: "POST",
url: '@Url.Action("SelectPackage", "Home")',
dataType: "JSon",
data: { "PackageId": PackageId },
success: function (data) {
console.log(data);
// $("#SecondInfo").focus({ scrollTop: "0px" });
$('html, body').animate({ scrollTop: $('#contact-us').offset().top }, 'slow');
},
error: console.log("it did not work"),
});
};
</script>
功能包选择(PackageId){
$.ajax({
类型:“POST”,
url:'@url.Action(“SelectPackage”,“Home”),
数据类型:“JSon”,
数据:{“PackageId”:PackageId},
成功:功能(数据){
控制台日志(数据);
//$(“#SecondInfo”).focus({scrollTop:“0px”});
$('html,body').animate({scrollTop:$('#contact-us').offset().top},'slow');
},
错误:console.log(“它不工作”),
});
};
这样称呼对吗?问题在于未调用函数。您的输入是
submit
类型将其类型更改为按钮。因此,当您单击按钮时,表单
将被发布
,onclick
将不会触发
<input type="button" class="submit" value="SignUp"
onclick="packageSelect(@ViewBag.PackageId)">
为什么需要将PackageId值从ViewBag传递到函数packageSelect?如果您只是使用ajax调用将值传递给contoller action,那么我认为可以在ViewBag的action方法中直接访问它
如果您正在对另一个控制器操作进行ajax调用,则可以使用TempData collection来存储PackageId。我认为click不会以这种方式接受参数。试一试
<input type="submit" class="submit" value="SignUp"
onclick="function(){packageSelect(@ViewBag.PackageId);}">
我也同意Mairaj的说法,即class='submit'是可疑的。非常严肃地说,我认为这不是一个好的方法
相反,你应该更清楚地接近它-
使用数据
属性
注册
然后-
$('button').on('click',function(){
var id = $(this).data('id'); //attribute's value
packageSelect(id); //passing the value to function
});
p.S.-
我还假设您正在迭代id,如果是,那么您不应该将其用作-
@ViewBag.PackageId
它应该是(如果它正在迭代并且不会保持不变)-
@items.PackageId
您不需要在foreach前面放一个@吗?这是你文章中的一个拼写错误吗?现在使用它并避免用行为污染你的分数要好得多。将PackageId
添加为data-
属性,并使用$('.yourClassName')。单击(function(){var id=$(this).data('PackageId');…})代码>@SuhailMumtazAwan,你最后一次回应我的评论是什么?(不知道你指的是什么)。正如其他人所指出的,您需要将输入更改为带有type=“button”
的按钮,或者包括返回false脚本中的code>或ajax调用和正常提交都将occur@SuhailMumtazAwan,您注意到您的错误为500。这通常是服务器上引发异常(或指定错误的数据类型)的结果。您可以使用浏览器工具(网络选项卡)检查详细信息)@SuhailMumtazAwan,如果您使用jqueryv1.9+那么返回Json(string.Empty)
可能会引发该异常。通过使用(比如)返回Json(“成功”)来测试这一点谢谢你的回答,@Ahmed我不认为是这样,我以前在该页面上使用过多个ajax调用……是的,但是submit
按钮将发布表单并尝试更改其类型,然后进行检查。我已将submit type更改为button,但没有任何效果检查您的浏览器控制台以查看错误是什么?我认为BJ的代码不会执行,因为在该代码函数中没有调用了
而一个新函数正在创建中,请试试我刚才说的。而500
错误意味着您的控制器方法中存在错误
。感谢您的回答,但我正在处理单页应用程序,并且已经调用了该操作3,4次。。。。。你不是这么认为的,我的问题是关于你在ajax调用中传递的参数,你为什么需要传递这个参数?请发布浏览器源代码中的HTML示例,以便我们可以看到生成的代码。我不确定你在问什么sirIn chrome,转到开发人员工具,然后在页面中右键单击输入按钮并从菜单中选择检查。在开发工具窗口中,它将显示HTML。复制它并向我们显示浏览器实际接收到的内容。另外,您确定没有意外地键入括号而不是大括号吗?onclick=“function(){packageSelect(@ViewBag.PackageId);}
这不起作用,因为你不是在调用函数,而是在定义一个函数。很好!我想这是另一种选择,但我在iPad上,在iPad上编辑代码真的是sux。另外,我不知道jQuery自动将数据属性拉入数据()收藏。我总是使用.attr()来获取它们。谢谢你更新我!@Manoz我真的对那个错误失去了理智,,,,,,谢谢你的回答,也很抱歉因为网络问题而延迟接受,,,cheers@SuhailMumtazAwan,np,干杯!
$('button').on('click',function(){
var id = $(this).data('id'); //attribute's value
packageSelect(id); //passing the value to function
});