Як викликати кілька функцій JavaScript в події onclick?


Відповіді:


390
onclick="doSomething();doSomethingElse();"

Але насправді, вам краще взагалі не використовувати onclickта приєднувати обробник подій до вузла DOM за допомогою коду Javascript. Це відоме як ненав'язливий JavaScript .


1
Дякую за посилання на ненав'язливий JS, я вже натрапляв на це раніше, і мені слід утриматися від написання нав'язливого JS лише тому, що я лінивий! xD
Qcom

9
немає проблем ... Я також дуже рекомендую jQuery, який дійсно допоможе вам у вашій ненав'язливій меті. Ви можете легко прикріпити обробники подій до елементів DOM і зробити набагато більше всього ненав’язливим. Я користувався ним уже 2 роки і ніколи не оглядався.
brad

4
Якщо одна закликана дія в onclick завершиться невдачею, вся справа падає як ланцюжок доміно, а onclick не працює.
Лабораторії Фіаско

8
Цей атрибут html насправді onclick=""ні onClick="". Це дуже поширена помилка.
DrewT

2
@ShubhamChopra, про що ви говорите, jsxнемає, htmlі це питання не позначено тегамиjsx
DrewT

75

Посилання з визначеною 1 функцією

<a href="#" onclick="someFunc()">Click me To fire some functions</a>

Запуск декількох функцій від someFunc()

function someFunc() {
    showAlert();
    validate();
    anotherFunction();
    YetAnotherFunction();
}

5
ІМХО, це справжній підхід програміста.
b1nary.atr0phy

2
@ b1nary.atr0phy nope. спосіб програміста - додати атрибут href = "" для тих випадків, коли у користувача немає JavaScript. потім за допомогою javascript (так що ви знаєте, що користувач підтримує його) ви видаляєте href і додаєте слухачів події до події. таким чином, якщо інший модуль вашого коду прослухає той самий клацання, він не перезапишеться і не перезапише ваш код. читайте: developer.mozilla.org/en-US/docs/Web/API/Event
gcb

3
Це може не спрацювати, якщо будь-які аргументи передаються до функцій, особливо якщо ви генеруєте ці аргументи з мови сервера. Створити / підтримувати код було б простіше, додавши функції (з будь-якими аргументами) в серверну мову, а не перевіряючи всі можливі ітерації як на сервері, так і на клієнті.
Сифон

Це так красиво і елегантно
Tessaracter

38

Цей код необхідний, якщо ви використовуєте лише JavaScript, а не jQuery

var el = document.getElementById("id");
el.addEventListener("click", function(){alert("click1 triggered")}, false);
el.addEventListener("click", function(){alert("click2 triggered")}, false);

7
це має бути правильна відповідь і правильний спосіб, як це зробити.
Fusion

11

Я використовував би element.addEventListenerметод, щоб зв’язати його з функцією. З цієї функції можна викликати кілька функцій.

Перевага, яку я бачу в прив'язці події до однієї функції, а потім виклику декількох функцій, полягає в тому, що ви можете виконати деяку перевірку помилок, мати деякі, якщо інші заяви, так що деякі функції отримують виклик лише у разі дотримання певних критеріїв.


9

Звичайно, просто прив’яжіть до нього кількох слухачів.

Short cutting with jQuery

$("#id").bind("click", function() {
  alert("Event 1");
});
$(".foo").bind("click", function() {
  alert("Foo class");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="foo" id="id">Click</div>


@hunter: Я скорочував jQuery. Я точно не пам'ятаю коду слухача рідної події. Ви також можете зробити те, що згадує Марко, але краще скористатися слухачем подій.
Джош К

1
Може не відповів на початкове запитання, але оскільки я використовую jQuery, він відповів моїм.
Лабораторії Фіаско

1
Будь-який спосіб зробити це за допомогою старого простого Javascript?
CodyBugstein


2

var btn = document.querySelector('#twofuns');
btn.addEventListener('click',method1);
btn.addEventListener('click',method2);
function method2(){
  console.log("Method 2");
}
function method1(){
  console.log("Method 1");
}
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>Pramod Kharade-Javascript</title>
</head>
<body>
<button id="twofuns">Click Me!</button>
</body>
</html>

Ви можете досягти / викликати одну подію одним або кількома методами.


1

Ви можете додати кілька лише за кодом, навіть якщо у вас є другий onclickатрибут у html, який він ігнорується, і click2 triggeredніколи не друкується, ви можете додати його в діїmousedown але це лише обхідне рішення.

Тож найкраще зробити це додати їх за кодом, як у:

var element = document.getElementById("multiple_onclicks");
element.addEventListener("click", function(){console.log("click3 triggered")}, false);
element.addEventListener("click", function(){console.log("click4 triggered")}, false);
<button id="multiple_onclicks" onclick='console.log("click1 triggered");' onclick='console.log("click2 triggered");' onmousedown='console.log("click mousedown triggered");'  > Click me</button>

Вам потрібно подбати, оскільки події можуть накопичуватися, і якщо ви додасте багато подій, ви можете втратити кількість порядку, за яким вони проходять.


1

Одним із додатків для підтримання JavaScript є використання названої функції.

Це приклад анонімної функції:

var el = document.getElementById('id');

// example using an anonymous function (not recommended):
el.addEventListener('click', function() { alert('hello world'); });
el.addEventListener('click', function() { alert('another event') });

Але уявіть, що у вас є кілька прикріплених до того ж елемента і хочете видалити один з них. Видалити жодну анонімну функцію зі слухача цього події неможливо.

Натомість ви можете використовувати названі функції:

var el = document.getElementById('id');

// create named functions:
function alertFirst() { alert('hello world'); };
function alertSecond() { alert('hello world'); };

// assign functions to the event listeners (recommended):
el.addEventListener('click', alertFirst);
el.addEventListener('click', alertSecond);

// then you could remove either one of the functions using:
el.removeEventListener('click', alertFirst);

Це також значно полегшує ваш код для читання та обслуговування. Особливо, якщо ваша функція більша.


Для отримання додаткової інформації "підручник" Avelx має приємне відео, яке я можу порекомендувати щодо цієї теми: youtube.com/watch?v=7UstS0hsHgI
Remi

0

Ви можете скласти всі функції в одну і викликати їх. Бібліотеки, як Рамдайс, мають функцію складання декількох функцій в одну.

<a href="#" onclick="R.compose(fn1,fn2,fn3)()">Click me To fire some functions</a>

або ви можете помістити композицію як окрему функцію у файл js та викликати її

const newFunction = R.compose(fn1,fn2,fn3);


<a href="#" onclick="newFunction()">Click me To fire some functions</a>

0

Це альтернатива brad anser - ви можете використовувати кому наступним чином

onclick="funA(), funB(), ..."

однак краще НЕ використовувати цей підхід - для малих проектів ви можете використовувати onclick лише у випадку виклику однієї функції (докладніше: оновлений ненав’язливий JavaScript ).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.