Вызов нескольких функций 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");