簡體   English   中英

單擊按鈕調用多個JavaScript函數

[英]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函數,那么也可以實現以下兩種方式:

  1. 如果你有兩個以上的功能,你可以在條件下將它們分組

    要么

  2. 你可以寫兩個不同的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM