web-dev-qa-db-fra.com

Appel de plusieurs fonctions JavaScript sur un clic de bouton

Comment appeler plusieurs fonctions sur un événement de clic de bouton?

Voici mon bouton,

<asp:LinkButton
    ID="LbSearch"
    runat="server"
    CssClass="regular"
    onclick="LbSearch_Click"
    OnClientClick="return validateView();ShowDiv1();">

Mais mon ShowDiv1 ne s'appelle pas ...

Mes fonctions 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;
}

Si la fonction ValidateView() renvoie true, je devrais appeler ShowDiv1().

16
Chendur Pandian

Parce que vous revenez du premier appel de méthode, le second ne s'exécute pas.

Essayez quelque chose comme 

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

ou inverser la situation,

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

ou s'il existe une dépendance de div1 par rapport à la routine de validation.

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

Le mieux serait de encapsuler plusieurs instructions en ligne dans une mini fonction comme celle-ci, pour simplifier l'appel:

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

et alors

OnClientClick="return clicked();"
28
John K

C'est parce qu'il est retourné après validateView();;

Utilisez ceci:

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

Essayez ceci .... Je l'ai eu ... OnClientClick = "var b = validateView (); if (b) var b = ShowDiv1 (); return b;"

2
elizabeth

Changement 

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

à 

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

s'il y a plus de 2 fonctions js, les deux manières suivantes peuvent également être implémentées:

  1. si vous avez plus de deux fonctions, vous pouvez les regrouper si 

    OU 

  2. vous pouvez écrire deux si différentes conditions.

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

OR

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

ShowDiv1 (); 

fonction de test ();

} retourne b ">

0
Gaurav Tailor

Il n'est pas appelé car vous avez une déclaration de retour au-dessus. Dans le code suivant:

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

doStuff () ne sera jamais appelé. Ce que je suggérerais est d'écrire une fonction wrapper

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

puis appelez la fonction wrapper à partir de votre gestionnaire onclick.

0
Chris Thompson

Je pense que, puisque return validateView(); renverra une valeur (à l'événement click?), Votre deuxième appel ShowDiv1(); ne sera pas appelé.

Vous pouvez toujours envelopper plusieurs appels de fonction dans une autre fonction, c'est-à-dire.

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

 fonction display () {
 if (validateView () && ShowDiv1 ()) renvoie true; 
} 

Vous pouvez aussi essayer:

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

Bien que je ne sache pas si cela jetterait une exception.

0
Jim Greenleaf

Et bien sûr, vous ne pouvez jamais appeler les deux fonctions en même temps. Pas n'importe qui dans le monde sauf que vous travaillez sur deux processeurs simultanément.

Le meilleur moyen consiste à appeler une fonction parent JavaScript et à spécifier toute la séquence de fonctions à appeler. Par exemple,

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
perilbrain

Parfois, cela donne une erreur de syntaxe que "return n'est pas une fonction", alors dans ce cas, supprimez simplement return et cela fonctionnera bien :) comme indiqué ci-dessous

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