Вызов нескольких функций JavaScript при нажатии кнопки

Как вызвать несколько функций при событии нажатия кнопки?

Вот моя кнопка,

<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().

Ответы

Ответ 1

Поскольку вы возвращаетесь с первого вызова метода, второй не выполняется.

Попробуйте что-нибудь вроде

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();"

Ответ 2

Это потому, что он возвращается после validateView();;

Используйте это:

OnClientClick="var ret = validateView();ShowDiv1(); return ret;"

Ответ 3

Попробуйте это.... Я понял... onClientClick = "var b = validateView(); if (b) var b = ShowDiv1(); return b;"

Ответ 4

измените OnClientClick="return validateView();ShowDiv1();"> на OnClientClick="javascript: if(validateView()) ShowDiv1();">

Ответ 5

Он не вызывается, потому что над ним есть оператор возврата. В следующем коде:

function test(){
  return 1;
  doStuff();
}

doStuff() никогда не будет вызван. Я бы предложил написать функцию-обертку

function wrapper(){
   if (validateView()){
     showDiv();
     return true;
   }
}

а затем вызовите функцию-обертку из обработчика onclick.

Ответ 6

Я думаю, что поскольку return validateView(); вернет значение (в событие click?), ваш второй вызов ShowDiv1(); не будет вызван.

Вы всегда можете переносить несколько вызовов функций в другую функцию, т.е.

<asp:LinkButton OnClientClick="return display();">

function display() {
   if(validateView() && ShowDiv1()) return true;
}

Вы также можете попробовать:

<asp:LinkButton OnClientClick="return (validateView() && ShowDiv1());">

Хотя я и понятия не имею, что это вызовет исключение.

Ответ 7

И, конечно же, вы никогда не сможете одновременно вызвать две функции. Ни один человек в мире, кроме того, что вы работаете на двух процессорах одновременно.

Лучший способ - вызвать родительскую функцию 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;
}

Ответ 8

если существует более 2 js-функций, тогда можно реализовать два способа:

  • Если у вас есть более двух функций, вы можете их сгруппировать, если условие

    ИЛИ

  • вы можете написать два разных условия if.

1 OnClientClick = "var b = validateView(), если (b) ShowDiv1(), если (b) testfunction(), return b" >

ИЛИ

2 OnClientClick = "var b = validateView(), если (b) {

ShowDiv1();

функции теста();

} return b" >

Ответ 9

Иногда он дает синтаксическую ошибку: "return is not a function", поэтому в этом случае просто удалите return, и он будет работать нормально:), как показано ниже

OnClientClick="var b = validateView(); if(b) var b = ShowDiv1(); b;"

Ответ 10

  <asp:Button ID="btnSubmit" runat="server"  OnClientClick ="showDiv()"
   OnClick="btnImport_Click" Text="Upload" ></asp:Button>

Ответ 11

btnSAVE.Attributes.Add("OnClick", "var b = DropDownValidate('" + drp_compcode.ClientID + "') ;if (b) b=DropDownValidate('" + drp_divcode.ClientID + "');return b");