繁体   English   中英

在onclientclick之后停止onclick

[英]Stop onclick after onclientclick

我已经看到了一些有关如何执行此操作的示例,但它们似乎对我没有用。 话虽如此,我做的事情与我所看到的例子有些不同,所以我不确定我想做的事情是否可行。

我有一个多行asp texbox和onclientclick,我想确保(在其他情况下)用户在提交onclick事件之前没有超过最大长度。 但是,此文本框是用户控件的一部分,在页面上将被使用X次,因此我不能只是从Javascript中获取控件。 我必须从后面的代码发送clientID。 因此,我在后面的代码上添加了OnClientClick事件,并在那里传递了该控件的clientID。 我不知道这就是为什么我要得到结果。

SaveNoteButton.OnClientClick = string.Format("return BeforeSave('{0}');", NoteTextBox.ClientID);

<asp:Button runat="server" CssClass="casenotes-bluebuttons" ID="SaveNoteButton" Text="Save" OnClick="SaveNoteButton_Click" Enabled="false" />

    function BeforeSave(noteCtrl) {
        var txt = document.getElementById(noteCtrl);

        if (txt.value.length > 500) {
            alert("false");
            return false;
        }
        else {
            alert("true");
            return true;
        }
    }

因此,从理论上讲,OnClientClick属性将添加到SaveNoteButton按钮。 当它被触发时,它传递NoteTextBox.ClientID,js检查文本框长度,返回true或false,然后根据返回值触发OnClick事件。 但事实并非如此。 我什至尝试将方法调用包装在警报中,并且该方法实际上返回了我期望的值,但是无论该方法的返回值如何,均不会触发OnClick事件。 我什至尝试删除方法调用并将其硬编码为true,但仍然不会触发。 因此,我知道返回值是真实的,但没有OnClick喜欢。

奇怪的是,这是调用js方法的语法。

SaveNoteButton.OnClientClick = string.Format("return BeforeSave('{0}');", NoteTextBox.ClientID);

变成

SaveNoteButton.OnClientClick = string.Format("BeforeSave('{0}')", NoteTextBox.ClientID);

而且效果很好。

删除Enabled="false"位。 这就是为什么onclick事件不会触发的原因。

好了,这是我为解决问题所做的:

SaveNoteButton.OnClientClick = string.Format("if(!BeforeSave('{0}', '{1}')) return false;", NoteTextBox.ClientID, this._maxLength);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM