Javascript代码在使用Update Panel的ASP.NET用户控件内停止工作

时间:2015-08-12 08:45:58

标签: javascript c# asp.net vb.net updatepanel

我有一个Javascript代码,用于完整gridview行点击以检查同一行中的复选框。 (放在外部文件中)

  $(document).ready(function () {
                $('tr.dataRow').on('click', function () {
                    var checked = $(this).find('input[id*=chkBusinessSelected]').prop('checked');
                    $(this).find('input[id*=chkBusinessSelected]').prop('checked', !checked);

                });
        });

        var prm = Sys.WebForms.PageRequestManager.getInstance();

        prm.add_endRequest(function () {
            $('tr.dataRow').on('click', function () {
                var checked = $(this).find('input[id*=chkBusinessSelected]').prop('checked');
                $(this).find('input[id*=chkBusinessSelected]').prop('checked', !checked);

            });
        });

在用户控件背后的代码中

  protected void grdBusiness_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            e.Row.CssClass = "dataRow";
        }
    }

请注意,它们包含在更新面板中以避免完全回发。该功能用于多次选择gridview中的项目。一切都运行良好,直到我在父页面中使用用户控件,其中,该页面也具有更新面板用法。

使用gridview行单击功能,然后单击用户控件外部的另一个按钮来处理某些内容。再次使用或重复该功能时,我无法单击该复选框。 Javacript代码停止工作。

我尝试删除父页面上的UpdatePanel,但它确实有效。但是我需要将Update面板放在User Control和Parent页面中。

1 个答案:

答案 0 :(得分:0)

对于jQuery 1.7+,您可以使用.on()将事件处理程序附加到父元素,并将带有'dataRow'的a选择器作为参数传递。

请参阅http://api.jquery.com/on/

所以不是......

$('tr.dataRow').click( function() {
    // do something
});

你可以写......

$('body').on('click', 'tr.dataRow', function() {
    // do something
});

不是你也可以在$(document).ready(function () {之外写出来 如果您使用的是旧版本,则可以使用jQuery的.live()方法。

更多细节Event binding on dynamically created elements?