我的javascript变量在函数调用之间变得不确定

时间:2012-04-11 16:30:19

标签: c# javascript

当按下链接按钮时,我有一个表单可以调用一些javascript和一些代码(对我来说是C#)。正常操作应该这样:单击链接按钮,从表单上的标签获取文本,打开HTML编辑器,通过单击文本编辑器上的“完成”保存文本,然后再次在表单上显示文本。它会做所有这些,但是我得到一个错误(控件未定义),然后这阻止我在表单上做任何其他工作。

首先,这是我的aspx代码,它是一个包含HTML编辑器和HTML编辑器的窗口。

<asp:Panel ID="EditCommentPopup" runat="server" SkinID="PopupPanel" HorizontalAlign="Center" Width="500px" Style="display:none;">
                <div id="SendCommentHeader" class="modalPopupHeader">
                    <table width="100%" style="vertical-align: middle">
                        <tr>
                            <td style="width: 50%; text-align: left; padding-left: 5px;">
                                <asp:Label ID="EditCommentHeaderLBL" runat="server" Font-Bold="true" Text="Change Comment" ></asp:Label>
                            </td>
                            <td style="width: 50%; text-align: right; padding-right: 3px;">
                                <asp:Button SkinID="SubmitButton" ID="SaveComment" runat="server" Text="Done" OnClientClick="submitEditorPopup(); return true;" OnClick="SubmitCommentButton_Click"/>
                                <asp:Button SkinID="CancelButton" ID="cancelCommentButton" runat="server" Text="Cancel"/>
                            </td>
                        </tr>
                    </table>
                </div>
                <ajaxToolkit:ModalPopupExtender ID="EditCommentPopupExtender" runat="server" TargetControlID="EditCommentHeaderLBL"
                        PopupControlID="EditCommentPopup" BackgroundCssClass="modalBackground" PopupDragHandleControlID="EditCommentPopup"
                        DropShadow="False" CancelControlID="cancelCommentButton" BehaviorID="ChangeCommentsPopup" >
                </ajaxToolkit:ModalPopupExtender>
                <asp:Panel ID="EditCommentInnerPanel" SkinID="PopupInnerPanel" HorizontalAlign="Center" runat="server" >
                    <asp:Label ID="CommandArgLBL" runat="server" Visible="false"></asp:Label>
                    <custom:CustomTextEditor ID="EditCommentsTextBox" runat="server" Width="100%" Height="300px" NoScript="true" />
                </asp:Panel>
            </asp:Panel>

以下是我的javascript函数

var contentLBL;
var editorControl;
var hiddenField;
function LoadEditorPopup(labelID, editorID, hiddenID, linkID) {
    editorControl = document.getElementById(editorID);
    contentLBL = document.getElementById(labelID);
    hiddenField = document.getElementById(hiddenID);
    editorControl.control.set_content(contentLBL.innerHTML);
    var popup = $find("ChangeCommentsPopup");
    popup.show();

}

function submitEditorPopup() {
    var tmp = editorControl.control.get_content(); //error flags here
    contentLBL.innerHTML = tmp;
    var str= new String();
    str = tmp;
    str = str.replace(/</g, "{%");
    str = str.replace(/>/g, "%}"); //stripping out html tags to prevent sql insertion
    hiddenField.value = str;
    var popup = $find("ChangeCommentsPopup");
    popup.hide();
}

这是我的C#函数

protected void ShowEditCommentPopup(object sender, EventArgs e)
{
    string arg = ((LinkButton)sender).CommandArgument;
    string content = "";
    string title = "";
    switch (arg)
    {
        //doing stuff, setting content and title
    }
    EditCommentHeaderLBL.Text = title;
    CommandArgLBL.Text = arg;
    EditCommentsTextBox.Content = content;
    EditCommentPopupExtender.Show();

    EditModalPopupExtender.Show(); //this is the form
}

所以,这里发生了什么,我点击链接按钮(未在aspx代码中显示),它会在javascript中触发LoadEditorPopup函数。它做了它的东西,我在onclientclick调用中有一个'return true',这样就可以调用后面代码中的下一个函数ShowEditCommentPopup。编辑器弹出,我可以使用它。当我单击“完成”时,在javascript中触发了SubmitEditorPopup事件,我收到一条错误,指出变量EditorControl未定义。我发现,如果我不调用ShowEditCommentPopup方法,则不会发生错误,但后来我又回到了原来的另一个问题,我希望如果这个问题得到解决,我将会修复它。

我真的希望这很清楚。提前谢谢!

1 个答案:

答案 0 :(得分:0)

您有一个包含javascript函数的代码段。该代码在哪里生活?它在一个类或函数内可能会被第二次调用?如果是这样,var editorControl;可能会再次运行并覆盖以前的editorControl变量。我会对var editorControl;发出警告以确保。

alert( 'Should only happen once' );
var editorControl;

由于这没有帮助,我想你可以尝试更换

var tmp = editorControl.control.get_content();

tmp = document.getElementById(editorID);

在submitEditorPopup中。