Как вызвать два метода для метода onclick кнопки в HTML или JavaScript?

Как вызвать два метода для метода onclick кнопки в HTML или JavaScript?


person Nirav Jain    schedule 04.05.2011    source источник


Ответы (4)


  1. Попробуй это:

    <input type="button" onclick="function1();function2();" value="Call2Functions" />
    
  2. Или вызовите вторую функцию в конце первой функции:

       function func1(){
         //--- some logic
         func2();
       }
    
       function func2(){
        //--- some logic
       }
    

    ... и вызовите func1() при нажатии кнопки:

    <input type="button" onclick="func1();" value="Call2Functions" />
    
person Harry Joy    schedule 04.05.2011

Как заявил Гарри Джой, вы можете сделать это с атрибутом onclick следующим образом:

<input type="button" onclick="func1();func2();" value="Call2Functions" />

Или в вашем JS так:

document.getElementById( 'Call2Functions' ).onclick = function()
{
    func1();
    func2();
};

Или, если вы назначаете щелчок программно и не уверены, существовал ли предыдущий щелчок (и не хотите его перезаписывать):

var Call2FunctionsEle = document.getElementById( 'Call2Functions' ),
    func1 = Call2FunctionsEle.onclick;

Call2FunctionsEle.onclick = function()
{
    if( typeof func1 === 'function' )
    {
        func1();
    }
    func2();
};

Если вам нужно, чтобы функции выполнялись в области действия элемента, по которому был сделан щелчок, можно просто использовать команду apply:

document.getElementById( 'Call2Functions' ).onclick = function()
{
    func1.apply( this, arguments );
    func2.apply( this, arguments );
};
person JAAulde    schedule 04.05.2011

Современный метод обработки событий:

element.addEventListener('click', startDragDrop, false);
element.addEventListener('click', spyOnUser, false);

Первый аргумент — это событие, второй — функция, а третий указывает, разрешать ли всплывать события.

Из QuirksMode:

Спецификация W3C DOM Level 2 Event уделяет пристальное внимание проблемам традиционной модели. Он предлагает простой способ зарегистрировать любое количество обработчиков событий для одного и того же события в одном элементе.

Ключом к модели регистрации событий W3C является метод addEventListener(). Вы даете ему три аргумента: тип события, выполняемую функцию и логическое значение (true или false), которое я объясню позже. Чтобы зарегистрировать нашу хорошо известную функцию doSomething() для щелчка по элементу, выполните следующие действия:

Полная информация здесь: http://www.quirksmode.org/js/events_advanced.html

Использование jQuery

если вы используете jQuery, есть хороший API для обработки событий:

$('#myElement').bind('click', function() { doStuff(); });
$('#myElement').bind('click', function() { doMoreStuff(); });
$('#myElement').bind('click', doEvenMoreStuff);

Полная информация здесь: http://api.jquery.com/category/events/

person Nathan Ridley    schedule 04.05.2011
comment
Я никогда не могу вспомнить в этой модели, является ли код, который вы показали, полностью совместимым с браузером, или есть проблемы, которые следует учитывать в этом отношении? EDIT: основываясь на вашем редактировании, я добавлю, что никогда не могу вспомнить модель addEventListener и ее последствия, потому что я всегда использую jQuery. - person JAAulde; 04.05.2011
comment
Есть, конечно, предостережения, когда вы смотрите на старые браузеры, но если вы используете для этого jQuery, вы в безопасности. - person Nathan Ridley; 04.05.2011

Привет,

Вы также можете сделать, как показано ниже... Таким образом, обе ваши функции должны вызываться, и если обе функции возвращают true, то они возвращают true, иначе возвращают false.

<input type="button" 
     onclick="var valFunc1 = func1(); var valFunc2 = func2(); if(valFunc1 == true && valFunc2 ==true) {return true;} else{return false;}" 
     value="Call2Functions" />

Спасибо, Вишал Патель

person Vishal Patel    schedule 21.10.2013