Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从循环中访问循环中的一项_Javascript_Jquery_Html_Asp.net Mvc - Fatal编程技术网

Javascript 从循环中访问循环中的一项

Javascript 从循环中访问循环中的一项,javascript,jquery,html,asp.net-mvc,Javascript,Jquery,Html,Asp.net Mvc,因此,我有两个项目,使用Jquery从数据库中迭代,对于每个项目,我都输出一个按钮来选择特定的项目,当我单击该行的按钮时,我想将详细信息发布到MVC中的控制器 $.each(data, function (i, val) { var item = $('<div></div>'); item.append('<h2><a>' +val.Name+ '</a></h2>');

因此,我有两个项目,使用Jquery从数据库中迭代,对于每个项目,我都输出一个按钮来选择特定的项目,当我单击该行的按钮时,我想将详细信息发布到MVC中的控制器

$.each(data, function (i, val) {
    var item = $('<div></div>');
    item.append('<h2><a>' +val.Name+ '</a></h2>');              
    item.append('<a id="button">SELECT</a>');
    tab.append(item);
});

如果我将函数添加到循环中,它将迭代的次数与循环中的项目相同。那么,我如何处理这个问题,以便在按下选择按钮后发送post名称呢?

使用DOM遍历方法获取所需的元素,以提取要传递给
$.ajax()的文本

由于HTML中的标识符必须是唯一的,所以请使用CSS类选择器将其作为目标

$.each(data, function (i, val) {
    var item = $('<div></div>');
    item.append('<h2><a>' + val.Name + '</a></h2>');
    item.append('<a class="button">SELECT</a>');
    tab.append(item);
});

将单击移动到页面底部任何循环之外

将id更改为class
item.append('SELECT')用于单击事件以选择正确的值

$('#myId').on('click', 'a.button', function () {
    var val = $(this).prev('h2 a').text();//get the val.Name value
    var item = { Name: val};//create a object
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        data: item,//jquery will take care of the encoding
        url: "/Person/GetData"
    });
});

为什么要把东西放在
标记中?重复的
id
属性是无效的html。使用类名。并使用
data-*
属性将数据添加到元素中,例如,使用
JSON.stringify()
并设置
contentType
选项实际上是不必要的,因为它是一个简单的对象。@StephenMuecke,我忽略了
contentType
,更新了回答我的意思是应该删除它(因此它使用默认的
'application/x-www-form-urlencoded;charset=UTF-8'
,然后使用它的just
数据:item,
,这也是为了OP的利益-最好使用
url:'@url.Action(“GetData”,“Person”),
$('#myId').on('click', 'a.button', function () {
    var item = {
        Name: $(this).prev('h2').find('a').text()
    };
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        data: {
            item: item
        },
        url: '@Url.Action("GetData", "Person")' //Note: this will not work in separate JS file
    });
});
$('#myId').on('click', 'a.button', function () {
    var val = $(this).prev('h2 a').text();//get the val.Name value
    var item = { Name: val};//create a object
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        data: item,//jquery will take care of the encoding
        url: "/Person/GetData"
    });
});