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()
.
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();"
C'est parce qu'il est retourné après validateView();;
Utilisez ceci:
OnClientClick="var ret = validateView();ShowDiv1(); return ret;"
Essayez ceci .... Je l'ai eu ... OnClientClick = "var b = validateView (); if (b) var b = ShowDiv1 (); return b;"
Changement
OnClientClick="return validateView();ShowDiv1();">
à
OnClientClick="javascript: if(validateView()) ShowDiv1();">
<asp:Button ID="btnSubmit" runat="server" OnClientClick ="showDiv()"
OnClick="btnImport_Click" Text="Upload" ></asp:Button>
s'il y a plus de 2 fonctions js, les deux manières suivantes peuvent également être implémentées:
si vous avez plus de deux fonctions, vous pouvez les regrouper si
OU
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 ">
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
.
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.
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;
}
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;"