2015-12-30 43 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 
}); 
}); 

希望這將是有用的

相關問題