0

我有以下 JQuery 代码:-

 $('.rpItem').on("click", "img", function (e) {
    alert('here');
    var text = $(this).siblings('span.rpText').text();
    e.preventDefault();
    e.stopPropagation();

    var args = {
        reportName: text
    };
    $.ajax({
        type: "POST",
        url: "Dashboard.aspx/AddToFavourites",
        data: JSON.stringify(args),
        contentType: "application/json;charset=utf-8;",
        success: function (data) {
            __doPostBack('#MainMenuUP', text);
            //__doPostBack('<%= MainMenuUP.ClientID %>', text);
        },
        error: function () {
        }
    });
});


$("#reports_textSearch").keyup(function () {
    var textLength = $(this).val().length;
    delay(function () {

        if (textLength == 0) {
            emptySearchString();
        }

        if (textLength > 2) {
            var args = {
                reportName: document.getElementById('reports_textSearch').value
            };
            doSearchString(args);
        }
    }, 1000);

});

function doSearchString(args) {
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "Dashboard.aspx/FetchReports",
        data: JSON.stringify(args),
        dataType: "json",
        success: function (data) {
            //__doPostBack('#MainMenuUP', data.d);
            __doPostBack('<%= MainMenuUP.ClientID %>', data.d);  
        },
        error: function (data) {
        }
    });
}

第一次它工作正常。然而,在回发之后,doSearch 继续正常工作,而

$('.rpItem').on("click", "img", function (e) {

失败。它甚至没有通过该代码。

我试图更换

__doPostBack('<%= MainMenuUP.ClientID %>', data.d); 

__doPostBack('<%= MainMenuUP.UniqueID %>', data.d);

但这只是我不想要的页面刷新。

任何帮助将不胜感激!

谢谢

4

2 回答 2

3

将您的选择器更改为此:

$('body').on("click", ".rpItem img", function (e) {
    // your code
});
于 2013-04-29T14:18:03.903 回答
0

如果.rpItem在您的 ajax 调用期间被替换,请阅读以下内容:

第一次执行你的 js 时,它会将on事件绑定到现有的 rpItems。除非您重新执行完成绑定的脚本,否则任何新添加.rpItem的都将跳过此绑定。

为了避免这种情况,您可以按照@Mojtaba 的建议使用该文档进行绑定,但请记住,您将绑定“添加”到文档中,从而“检查”是否每次都单击了.rpItem img在文档上单击。

否则,您可以创建一个将 .rpItem 作为参数并显式完成绑定的函数。每个新的 .rpItem 添加到您的页面后,您可以调用此函数来绑定点击事件。前任:

function foo(arg) {
  $(arg).on("click", "img", function (e) {
  ...
  }
}
$(document).ready(function(){
    $('.rpItem').each(function(){
       foo($(this));
    };

});
于 2013-04-29T14:28:02.843 回答