2015-12-30 39 views
1

对我而言, 我有一个拥有多个子div的父div。这些子div是根据$ .each()函数生成的。

函数运行的次数,生成的div数。这些子div包含类似UserId,UserName,UserPic和后续按钮的数据。现在,我想在按钮单击时编写一个服务器端函数,并发布UserId到控制器。

现在,我已经看到很多这样的问题和解决方案是有一个全局变量,并从您的$ .each函数为该变量赋值。 但是,在我的情况,我的$。每个功能将多次循环因此如何找回特定item.Id点击后续按钮时和回来后该值控制器

$(document).ready(function() { 
var parent = $(".div1"); 

$.getJSON("/Home/GetUsers", null, function(data) { 
    parent.html(""); 

    $.each(data, function(i, item) { 
    var html = "<div class='div2'>"; 
    html += "Name: " + item.UserName + "<br />"; 
    html += item.ArticleCount; 
    html += "<img src='" + item.UserImage + "'height='20px' width='20px'/>"; 
    html += "<button type='button' class='newButton'>Click Me!</button>"; 
// wants to send current userId on button click 
    html += item.Id; 
    html += "</div>"; 
    parent.append(html); 
    }); 
}); 
parent.on('click', '.newButton', function(e) { 
    var button = $(this); 
    var html = "<div class='listItem'>"; 
        $.ajax({ 
          type: "POST", 
          url: "Home/Follow", // Controller/View 
          data: { //Here, i am struck, how to get back      correct userid from above $.each function 
          id: $(".listItem").  
        } 
}); 
}); 
+1

您可以将item.Id保存在按钮上的数据属性中,并使用'button.data('id')' – jcubic

回答

1

您可以将id在每个按钮中使用data属性data-id例如:

html += "<button data-id="+item.Id+" type='button' class='newButton'>Click Me!</button>"; 

,你可以得到的id当按钮点击,如:

$.ajax({ 
    type: "POST", 
    url: "Home/Follow", // Controller/View 
    data: { id: $(this).data('id') } 
}); 

希望这有助于。

+1

'$(this)'获得它。$ .ajax使得'this'指向传递的对象而不是点击元素。 – nightgaunt

+1

@nightgaunt不,不是。 'this'是调用函数的上下文,它是点击按钮。 [小提琴](https://jsfiddle.net/6hew1wr7/) – Andreas

+0

你说得对@Andreas在'success'函数中不起作用。 –

0

您可以添加item.Id值作为Id或任何data- *属性到按钮。点击后,您可以检索该值。

你也可以只创建一个字符串,而不是做html +=

所以我已经修改了代码,并在这里是片段

$(document).ready(function() { 
var parent = $(".div1"); 

$.getJSON("/Home/GetUsers", null, function(data) { 
    parent.html(""); 

    $.each(data, function(i, item) { 
    // Refactored DOM 
    var html = "<div class='div2'>Name: " + item.UserName + "<br />"+item.ArticleCount+ 
        "<img src='" + item.UserImage + "'height='20px' width='20px'/>"+ 
         "<button type='button' class='newButton' id = '"+item.Id+"'>Click Me!</button>"+ 
         item.Id+"</div>"; 

      parent.append(html); 
     }); 
}); 
parent.on('click', '.newButton', function(event) { 
    var getId = event.target.id; // Event object will give all parameters you need 
    alert(getId); 
    var html = "<div class='listItem'>"; 
        $.ajax({ 
          type: "POST", 
          url: "Home/Follow", // Controller/View 
          data: { id: getId} // Added the required Id 
}); 
}); 

希望这将是有用的

相关问题