[英]Calling multiple JavaScript functions on a button click
如何在按鈕點擊事件上調用多個函數?
這是我的按鈕,
<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()
。
因為您從第一個方法調用返回,所以第二個不執行。
嘗試類似的東西
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();"
那是因為,它在validateView();;
之后返回
用這個:
OnClientClick="var ret = validateView();ShowDiv1(); return ret;"
試試這個....我得到了它... onClientClick =“var b = validateView(); if(b)var b = ShowDiv1(); return b;”
更改
OnClientClick="return validateView();ShowDiv1();">
至
OnClientClick="javascript: if(validateView()) ShowDiv1();">
如果有超過2個js函數,那么也可以實現以下兩種方式:
如果你有兩個以上的功能,你可以在條件下將它們分組
要么
你可以寫兩個不同的if條件。
1 OnClientClick =“var b = validateView(); if(b)ShowDiv1(); if(b)testfunction(); return b”>
要么
2 OnClientClick =“var b = validateView(); if(b){
ShowDiv1();
testfunction();
} return b“>
有時它會給出“返回不是函數”的語法錯誤,因此在這種情況下只需刪除return並且它將正常工作:)如下所示
OnClientClick="var b = validateView(); if(b) var b = ShowDiv1(); b;"
它沒有被調用,因為你上面有一個return語句。 在以下代碼中:
function test(){
return 1;
doStuff();
}
永遠不會調用doStuff()。 我建議寫一個包裝函數
function wrapper(){
if (validateView()){
showDiv();
return true;
}
}
然后從onclick
處理程序調用包裝器函數。
我認為自return validateView();
將返回一個值(對於click事件?),你的第二個調用ShowDiv1();
不會被打電話。
您總是可以在另一個函數中包含多個函數調用,即
<asp:LinkButton OnClientClick="return display();"> function display() { if(validateView() && ShowDiv1()) return true; }
您也可以嘗試:
<asp:LinkButton OnClientClick="return (validateView() && 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;
}
ShowDiv1();
return true;
}
<asp:Button ID="btnSubmit" runat="server" OnClientClick ="showDiv()"
OnClick="btnImport_Click" Text="Upload" ></asp:Button>
btnSAVE.Attributes.Add("OnClick", "var b = DropDownValidate('" + drp_compcode.ClientID + "') ;if (b) b=DropDownValidate('" + drp_divcode.ClientID + "');return b");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.