我们如何在javascript中调用委托?

时间:2011-07-15 09:36:29

标签: c# javascript asp.net delegates

我正在写一个javascript

function ValueChanges() 

  {

    Parent = document.getElementById('<%= grvMultiChoiceAnswerList.ClientID %>');
    var items = Parent.getElementsByTagName('textarea');
    var chkboxControl = Parent.getElementsByTagName('checkbox');

    for (i = 0; i < items.length; i++) {
        var hdnTextControl, hdnExplanation;
        hdnTextControl = (items[i].id).replace("txtText", "hdnText");
        hdnExplanation = (items[i].id).replace("txtExplanation", "hdnExplanation");

        if (items[i].id.split("_")[5] == "txtText") {
            if (items[i].value != document.getElementById(hdnTextControl).value) {
                var ssave = window.confirm('Your changes are not saved. Do you want to save your changes before you exit.')
                if (ssave == true) {
                    document.getElementById('<%=btnUpdate.ClientID%>').click(); // I WANT TO REPLACE THIS LIKE SO MY DELEGATE GETS FIRE
                    return false;
                }
                else
                    return true;
            }
        }
    }

我有代表

  grvMultiChoiceAnswerList.RowUpdating += delegate(object obj, GridViewUpdateEventArgs args)

{
            SaveFields();
            if (ReloadContent != null)
                ReloadContent(null, EventArgs.Empty);

        };

现在我想在我的java脚本中调用此委托,并希望替换document.getElementById('&lt;%= btnUpdate.ClientID%&gt;')。click();如果(ssave == ture)条件为真,那么我的代表会被激怒

1 个答案:

答案 0 :(得分:1)

为了从javascript访问服务器上的“方法”,你需要使用你的javascript进行回发:

__doPostBack('MyBtn','');

就服务器而言,这将与

相同
document.getElementById('<%=btnUpdate.ClientID%>').click(); 

,但对于客户端,它将跳过与点击按钮链接的任何javascript。

要访问服务器端,您需要模拟从javascript中触发事件,以便asp.net页面可以识别它并坚持它。添加网格视图的更新列并查看生成的javascript,它将为您提供线索,以了解在dopostback中触发的内容。您可能需要保留列但能够使用css隐藏它。