我将Onclientclick事件附加到服务器端代码中的按钮,如下所示,
TopPanelButton.OnClientClick = string.Format("if(!ValidData({0},{1},{2},{3})) return false;", txtOD.ClientID, radCmbOD.ClientID, txtgetMe.ClientID, RadAjaxLoadingPanel1.ClientID);
此外,onClick事件附加到aspx页面中的相同按钮
<asp:Button ID="TopPanelButton" runat="server" Text="Go"
CssClass="CBtn1" Width="30px" Height="21px" OnClick="TopPanelButton_Click" />
如果onclientclick返回true,则应触发服务器端点击事件。调用“ValidateData()”函数来验证表单中的条目。
此代码在IE中正常运行。但在Firefox中,这两个事件并不充实。如果我评论“TopPanelButton.OnClientClick = ...”代码,那么onClick事件就会被触发。
我在哪里可以在下面的代码中应用此代码 Page.ClientScript.GetPostBackEventReference()。
TopPanelButton.OnClientClick = string.Format("if(!ValidData({0},{1},{2},{3})) return false;", txtOD.ClientID, radCmbOD.ClientID, txtgetMe.ClientID, RadAjaxLoadingPanel1.ClientID);
Firefox没有调用ValidData函数。我在javascript中设置了警报,但Firefox中没有显示警告消息。但IE显示警报消息。
我的validData函数:
function ValidData(txtOND, ddlOND, txtgetMe, aPanel) {
alert("Entered");
if (!ValidNumber(txtgetMe)) {
aPanel.hide();
return false;
}
if (ddlOND.value == "Origin" || ddlOND.value == "Destination") {
if (!ValidOriginOrDestination(txtOND, ddlOND.value)) {
aPanel.hide();
return false;
}
}
else if (ddlOND.value == "O&D") {
if (!ValidOND(txtOND)) {
aPanel.hide();
return false;
}
}
if (ddlOND.value == "Region Starting with" || ddlOND.value == "Country Starting with" || ddlOND.value == "Budget Station Starting with") {
if (txtOND.value.length == 0) {
radalert("Enter a value for " + ddlOND.value);
aPanel.hide();
return;
}
}
aPanel.show();
return true;
}
答案 0 :(得分:1)
我发现问题并修复了。给出了我的问题的解决方案。
我正在使用telerik控件,其中clientID不被视为Firefox中的对象。但是IE将clientID视为对象。所以我之前的代码在IE中运行良好,而不是在Firefox中。现在我更改了OnClientClick,方法是在单个quoute中将clientID作为字符串传递,如下所示:
TopPanelButton.OnClientClick = string.Format("javascript:if(!ValidData('{0}','{1}','{2}','{3}')) return false;", txtOD.ClientID, radCmbOD.ClientID, txtgetMe.ClientID, RadAjaxLoadingPanel1.ClientID);
在我的javascript中,我使用了document.getElementById来获取对象。
function ValidData(txtOND, ddlOND, txtgetMe, aPanel) {
var l_aPanel = document.getElementById(aPanel);
var l_txtgetMe = document.getElementById(txtgetMe);
if (!ValidNumber(l_txtgetMe)) {
return false;
}
var l_txtOND = document.getElementById(txtOND);
var l_ddlOND = document.getElementById(ddlOND);
if (l_ddlOND.value == "Origin" || l_ddlOND.value == "Destination") {
if (!ValidOriginOrDestination(l_txtOND, l_ddlOND.value)) {
return false;
}
}
else if (l_ddlOND.value == "O&D") {
if (!ValidOND(document.getElementById(txtOND))) {
return false;
}
}
if (l_ddlOND.value == "Region Starting with" || l_ddlOND.value == "Country Starting with" || l_ddlOND.value == "Budget Station Starting with") {
if (l_txtOND.value.length == 0) {
radalert("Enter a value for " + l_ddlOND.value);
return false;
}
}
return true;
}
这在IE和Firefox中都可以正常使用。
答案 1 :(得分:0)
FireFox不处理OnClientClick和OnClick事件(尽管Internet Explorer处理得很好)。要解决此问题,可以使用方法Page.ClientScript.GetPostBackEventReference()
生成客户端Javascript,以便对控件进行回发。
因此,以下代码将隐藏除加载图形之外的页面上的所有内容,并调用btnSubmit回发方法。 它返回false的原因是Internet Explorer会两次调用服务器端OnClick方法。
btnSubmit.OnClientClick = String.Format("ElementStyle(document.getElementById('wrapper'),'display','none'); {0}; return false;", Page.ClientScript.GetPostBackEventReference(btnSubmit, ""));