Вызов нескольких функций JavaScript одним нажатием кнопки - PullRequest
16 голосов
/ 10 марта 2010

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

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

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

Ответы [ 11 ]

28 голосов
/ 10 марта 2010

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

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

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();"
4 голосов
/ 10 марта 2010

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

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

OnClientClick="var ret = validateView();ShowDiv1(); return ret;"
2 голосов
/ 30 ноября 2010

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

1 голос
/ 10 марта 2010

Изменение

OnClientClick="return validateView();ShowDiv1();">

до

OnClientClick="javascript: if(validateView()) ShowDiv1();">
0 голосов
/ 08 июня 2016
  <asp:Button ID="btnSubmit" runat="server"  OnClientClick ="showDiv()"
   OnClick="btnImport_Click" Text="Upload" ></asp:Button>
0 голосов
/ 16 апреля 2013

Иногда это дает синтаксическую ошибку, что «return не является функцией», поэтому в этом случае просто удалите return, и она будет работать нормально :), как показано ниже

OnClientClick="var b = validateView(); if(b) var b = ShowDiv1(); b;"
0 голосов
/ 25 сентября 2012

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

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

    ИЛИ

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

1 OnClientClick = "var b = validateView (); if (b) ShowDiv1 (); if (b) testfunction (); вернуть b">

OR

2 OnClientClick = "var b = validateView (); if (b) {

ShowDiv1 ();

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

} return b ">

0 голосов
/ 07 января 2011
btnSAVE.Attributes.Add("OnClick", "var b = DropDownValidate('" + drp_compcode.ClientID + "') ;if (b) b=DropDownValidate('" + drp_divcode.ClientID + "');return b");
0 голосов
/ 10 марта 2010

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

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

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

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...