![](/img/trans.png)
[英]onclick and onclientclick webmethod executed after 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.