0

好的,所以我有这个中继器:

        <asp:Repeater runat="server" ID="rep"  >
        <ItemTemplate> 
        <tr>
        <td>           
        <div id="resultDiv">
        click me
        </div>                      
        </td>
        </tr>            
        </ItemTemplate>
        </asp:Repeater>

我有这个 jquery ajax 调用:

  $(document).ready(function () {
            $("#resultDiv").click(function () {
                $.ajax({
                    type: "POST",
                    url: "Page.aspx/GetDate",
                    data: "{}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (msg) {
                        // Replace the div's content with the page method's return.
                        $("#resultDiv").text(msg.d);
                    }
                });
            });
        });

问题是这只适用于中继器内的第一个 div。如果我单击任何其他 div,则不会触发 click 事件。我知道这是因为它们都有相同的 id,即“resultDiv”。

我现在正在寻找一种为他们提供唯一 ID 的方法,我可以这样做:(在中继器 itemtemplate 内)

 <td>          
<div id="resultDiv_<%#Eval("divId") %>">
 click me
 </div>        

这为转发器内的所有 div 提供了唯一的 ID,但是这样 ajax 点击事件不再触发,因为

 $("#resultDiv").click(function () {

resultDiv现在类似于resultDiv_1or resultDiv_2

所以我正在寻找一些东西来将点击事件绑定到转发器内的每个 div。我尝试在 ajax 调用中这样做:

$("#<%#Eval("divId") %>").click(function () 

但这不起作用,并给了我各种错误。

我有什么办法可以做到这一点?请不要说我不想使用更新面板。

4

1 回答 1

1

如果您需要实时事件处理程序,您应该使用on

$("body").on('click', '#resultDiv', function(e) { });

如果您想以相同的方式处理所有#resultDiv(使用resultDiv_1or resultDiv_2),您可以使用:

$("body").on('click', 'div[id^=resultDiv]', function(e) { });

您可以使用类而不是 ID,因为它们不是唯一的,您可以使用addClass或轻松地使用它们removeClass

在您的情况下,我将向每个 div 添加相同的类,并将参数传递给一些数据属性(如果您需要每次单击来调用不同的任务):

<div id="resultDiv" class="result" data-some-var="some-param">
    click me
</div>   

而不是你的活动:

$("body").on('click', '.result', function(e) {
    var param = $(this).attr('data-some-var');
    //send or do something different according to the param
});
于 2013-03-17T10:32:14.573 回答