2010-03-10 6 views
15

Как вызвать несколько функций при событии нажатия кнопки?Вызов нескольких функций 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() возвращает истину, я должен позвоните по телефону ShowDiv1().

ответ

28

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

Try что-то вроде

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

или переломить ситуацию,

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

или, если есть зависимость див1 на процедуры проверки.

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

Что может быть лучше всего инкапсулировать нескольких операторов в INLINE в мини-функции, как это так, чтобы упростить вызов:

// change logic to suit taste 
function clicked() { 
    var b = validateView(); 
    if (b) 
     ShowDiv1() 
    return b; 
} 

и затем

OnClientClick="return clicked();" 
+0

это тоже помогло мне. спасибо – Yasitha

4

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

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

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

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

0

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

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

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

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

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

0

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

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

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

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

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

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

Хотя я понятия не имею, если это будет сгенерировано исключение.

+0

Это не вызовет исключения, если обе функции существуют, единственная проблема заключается в том, что если функция 'validateView' возвращает true, оператор return получит значение второго операнда оператора' && ', и поскольку эта функция doesn 't вернуть что-либо, что он вернет undefined, например: 'true && undefined == undefined' – CMS

+0

Будет ли решение использовать || оператор? –

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; 
} 
2

Попробуйте это .... я получил его ... OnClientClick = "вар б = validateView(), если (б) вар б = ShowDiv1(); возвращение б;"

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

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

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

    ИЛИ

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

1 OnClientClick = "переменная Ь = validateView(); если (б) ShowDiv1(); если (б) функции теста(); возвращение б">

ИЛИ

2 OnClientClick = «вар б = validateView(); если (б) {

ShowDiv1();

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

} возвращение б ">

0

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

OnClientClick="var b = validateView(); if(b) var b = ShowDiv1(); b;" 
0
<asp:Button ID="btnSubmit" runat="server" OnClientClick ="showDiv()" 
    OnClick="btnImport_Click" Text="Upload" ></asp:Button> 
+1

Не могли бы вы прочитать это и улучшить этот ответ? http://stackoverflow.com/help/how-to-answer –

Смежные вопросы