我已经看过一些关于如何做到这一点的例子,但他们似乎并没有为我工作。话虽如此,我所做的与我见过的例子有点不同,所以我不确定我尝试做的事情是否可行。
我有一个多行的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爱。
答案 0 :(得分:0)
奇怪的是,它是调用js方法的语法。
SaveNoteButton.OnClientClick = string.Format("return BeforeSave('{0}');", NoteTextBox.ClientID);
变为
SaveNoteButton.OnClientClick = string.Format("BeforeSave('{0}')", NoteTextBox.ClientID);
它运作得很好。
答案 1 :(得分:0)
删除Enabled="false"
位。这就是onclick
事件不会触发的原因。
答案 2 :(得分:0)
好吧,这就是我为解决问题所做的工作:
SaveNoteButton.OnClientClick = string.Format("if(!BeforeSave('{0}', '{1}')) return false;", NoteTextBox.ClientID, this._maxLength);