2010-10-11 3 views
155

Есть ли способ использовать атрибут html onclick для вызова нескольких функций JavaScript?Как вызвать несколько функций JavaScript в событии onclick?

+0

Возможный дубликат [Могу ли я иметь два события onclick JavaScript в одном элементе?] (Http://stackoverflow.com/questions/2881307/can-i-have-two-javascript-onclick-events-in-one- элемент) –

ответ

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

Но на самом деле, вы лучше не использовать onclick вообще и прикрепление обработчик события к узлу DOM через код Javascript. Это называется unobtrusive javascript.

+1

Спасибо за ссылку на ненавязчивый JS, я уже сталкивался с этим раньше, и я должен воздержаться от написания навязчивого JS только потому, что я ленив! xD – Qcom

+6

нет проблем ... Я также очень рекомендую jQuery, который действительно поможет вам с вашей ненавязчивой целью. Вы можете легко присоединить обработчики событий к элементам DOM и сделать гораздо более незаметно. Я использовал его уже 2 года и никогда не оглядывался назад. – brad

+4

Если один из вызванных действий в onclick терпит неудачу, все это падает как цепочка домино, и onclick не работает. –

4

Несомненно, просто привяжите к нему несколько слушателей.

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>

+3

никогда не упоминается jQuery – hunter

+0

@hunter: Я был короткой резкой с помощью jQuery. Я точно не помню код слушателя собственного события.Вы также можете сделать то, что упоминает Марко, но лучше использовать прослушиватель событий. –

+1

Возможно, я не ответил на исходный вопрос, но поскольку я использую jQuery, он ответил мне. –

57

Ссылка 1 функции определяется

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

Обжиг несколько функций из someFunc()

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

IMHO, это подход истинного программиста. –

+0

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

+3

Это может не сработать, если у вас есть какие-либо аргументы, передаваемые этим функциям, особенно если вы создаете эти аргументы с сервера, боковой язык. Было бы проще создать/поддерживать код, добавив функции (с любыми аргументами) на серверном языке, а не тестировать все возможные итерации как на сервере, так и на клиенте. – Siphon

9

Я хотел бы использовать метод element.addEventListener, чтобы связать его функции. Из этой функции вы можете вызывать несколько функций.

Преимущество, которое я вижу в привязке события к одной функции, а затем вызывая несколько функций, состоит в том, что вы можете выполнить некоторую проверку ошибок, иметь некоторые инструкции if else, чтобы некоторые функции вызывались только при выполнении определенных критериев.

26

Это требуется код, если вы используете только JavaScript и не JQuery

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

Это должен быть правильный ответ и правильный способ, как это сделать. – Fusion

0

Вы можете создавать все функции в один и назвать them.Libraries как Ramdajs имеет функцию сочинить несколько функций в одном ,

<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

, вы одержимы рампой. –

0

Вы можете добавить несколько только с помощью кода, даже если у вас есть второй onclick atribute в 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>

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

Смежные вопросы