如何在按钮点击事件上调用多个功能?
这是我的按钮,
<asp:LinkButton
ID="LbSearch"
runat="server"
CssClass="regular"
onclick="LbSearch_Click"
OnClientClick="return validateView();ShowDiv1();">
但我的ShowDiv1
没有被调用......
我的JavaScript功能:
function ShowDiv1() {
document.getElementById("ReportDiv").style.display = 'block';
return false;
}
function validateView() {
if (document.getElementById("ctl00_ContentPlaceHolder1_DLCategory").selectedIndex == 0) {
document.getElementById("ctl00_ContentPlaceHolder1_ErrorMsg").innerHTML = "Please Select Your Category";
document.getElementById("ctl00_ContentPlaceHolder1_DLCategory").focus();
return false;
}
if (document.getElementById("ctl00_ContentPlaceHolder1_DLEmpName").selectedIndex == 0) {
document.getElementById("ctl00_ContentPlaceHolder1_ErrorMsg").innerHTML = "Please Select Your Employee Name";
document.getElementById("ctl00_ContentPlaceHolder1_DLEmpName").focus();
return false;
}
return true;
}
如果ValidateView()
函数返回true,我应该调用ShowDiv1()
。
答案 0 :(得分:28)
因为您从第一次方法调用返回,所以第二次不执行。
尝试类似
的内容OnClientClick="var b = validateView();ShowDiv1(); return b"
或扭转局面,
OnClientClick="ShowDiv1();return validateView();"
或者如果div1对验证例程有依赖关系。
OnClientClick="var b = validateView(); if (b) ShowDiv1(); return b"
最好的方法是将封装多个内联语句封装到这样的迷你函数中,以简化调用:
// change logic to suit taste
function clicked() {
var b = validateView();
if (b)
ShowDiv1()
return b;
}
然后
OnClientClick="return clicked();"
答案 1 :(得分:4)
那是因为,它会在validateView();;
使用此:
OnClientClick="var ret = validateView();ShowDiv1(); return ret;"
答案 2 :(得分:2)
试试这个.... 我知道了... onClientClick =“var b = validateView(); if(b)var b = ShowDiv1(); return b;”
答案 3 :(得分:1)
更改
OnClientClick="return validateView();ShowDiv1();">
到
OnClientClick="javascript: if(validateView()) ShowDiv1();">
答案 4 :(得分:0)
它没有被调用,因为你上面有一个return语句。在以下代码中:
function test(){
return 1;
doStuff();
}
永远不会调用doStuff()。我建议写一个包装函数
function wrapper(){
if (validateView()){
showDiv();
return true;
}
}
然后从onclick
处理程序调用包装函数。
答案 5 :(得分:0)
我认为,由于return validateView();
会返回一个值(对于click事件?),您的第二个调用ShowDiv1();
将不会被调用。
您始终可以在另一个函数中包含多个函数调用,即
<asp:LinkButton OnClientClick="return display();"> function display() { if(validateView() && ShowDiv1()) return true; }
您也可以尝试:
<asp:LinkButton OnClientClick="return (validateView() && ShowDiv1());">
虽然我不知道是否会引发异常。
答案 6 :(得分:0)
当然,你永远不能同时调用这两个函数。除了你同时使用两个处理器之外,世界上没有任何人。
最好的方法是调用JavaScript父函数,然后指定要调用的所有函数序列。例如,
function ShowDiv1() {
document.getElementById("ReportDiv").style.display = 'block';
return false;
}
function validateView()
{
if (document.getElementById("ctl00_ContentPlaceHolder1_DLCategory").selectedIndex == 0) {
document.getElementById("ctl00_ContentPlaceHolder1_ErrorMsg").innerHTML = "Please Select Your Category";
document.getElementById("ctl00_ContentPlaceHolder1_DLCategory").focus();
return false;
}
if (document.getElementById("ctl00_ContentPlaceHolder1_DLEmpName").selectedIndex == 0) {
document.getElementById("ctl00_ContentPlaceHolder1_ErrorMsg").innerHTML = "Please Select Your Employee Name";
document.getElementById("ctl00_ContentPlaceHolder1_DLEmpName").focus();
return false;
}
ShowDiv1();
return true;
}
答案 7 :(得分:0)
如果有超过2个js函数,那么也可以实现以下两种方式:
如果你有两个以上的功能,你可以在条件
的情况下将它们分组OR
你可以写两个不同的if条件。
1 OnClientClick =&#34; var b = validateView(); if(b)ShowDiv1(); if(b)testfunction();返回b&#34;&gt;
OR
2 OnClientClick =&#34; var b = validateView();如果(b)中 {
ShowDiv1();
testfunction();
}返回b&#34;&gt;
答案 8 :(得分:0)
有时它会给出“返回不是函数”的语法错误,因此在这种情况下只需删除return并且它将正常工作:)如下所示
OnClientClick="var b = validateView(); if(b) var b = ShowDiv1(); b;"
答案 9 :(得分:0)
<asp:Button ID="btnSubmit" runat="server" OnClientClick ="showDiv()"
OnClick="btnImport_Click" Text="Upload" ></asp:Button>
答案 10 :(得分:-1)
btnSAVE.Attributes.Add("OnClick", "var b = DropDownValidate('" + drp_compcode.ClientID + "') ;if (b) b=DropDownValidate('" + drp_divcode.ClientID + "');return b");