我创建了一个非常简单的测试页来复制我在应用程序中遇到的一个问题。很抱歉,如果这看起来很冗长,需要一些如此琐碎的东西。
.aspx页
<body>
<form id="form1" runat="server">
<asp:TextBox ID="tb" runat="server"></asp:TextBox>
<asp:Button ID="btnOk" runat="server" text="OK" Width="60px" UseSubmitBehavior="true" OnClientClick="saveAmendments();" />
</form>
在“加载后面的代码”页面中,我向文本框添加了onchange属性
if (!IsPostBack)
{
tb.Attributes.Add("onchange", "addSaveDetails('abc###123###456###test###abc###');");
}
}
呈现如下
<body>
<form name="form1" method="post" action="TestJP.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUi3er8ht8oaCZzy2..." />
</div>
<div>
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAwKOoa..." />
</div>
<input name="tb" type="text" value="testtt" id="tb" onchange="addSaveDetails('abc###123###456###test###abc###');" />
<input type="submit" name="btnOk" value="OK" onclick="saveAmendments();" id="btnOk" style="width:60px;" />
</form>
因此,如果我更改文本框中的值并单击屏幕上其他位置的somwhere,则会触发addsavedetails函数。然后单击按钮,将触发保存修正。但是,如果更改文本,然后立即单击按钮(而不是首先在屏幕上的其他地方),则只会触发第一个(on change)函数。onclick事件永远不会发生。被调用的JS只执行警报。什么可以阻止事件冒泡到最后一个调用?