Как вызвать несколько функций JavaScript в событии onclick?
есть ли способ, чтобы использовать onclick
атрибут html для вызова более одной функции JavaScript?
8 ответов
onclick="doSomething();doSomethingElse();"
но на самом деле, вам лучше не использовать onclick
вообще и прикрепление обработчика событий к узлу DOM через ваш код Javascript. Это известно как ненавязчивый javascript.
связь с 1 определенной функцией
<a href="#" onclick="someFunc()">Click me To fire some functions</a>
запуск нескольких функций из someFunc()
function someFunc() {
showAlert();
validate();
anotherFunction();
YetAnotherFunction();
}
это код, необходимый, если вы используете только JavaScript, а не jQuery
var el = document.getElementById("id");
el.addEventListener("click", function(){alert("click1 triggered")}, false);
el.addEventListener("click", function(){alert("click2 triggered")}, false);
Я бы использовал element.addEventListener
метод, чтобы связать его с функцией. Из этой функции можно вызвать несколько функций.
преимущество, которое я вижу в привязке события к одной функции, а затем вызове нескольких функций, заключается в том, что вы можете выполнить некоторую проверку ошибок, иметь некоторые операторы if else, чтобы некоторые функции вызывались только при соблюдении определенных критериев.
конечно, просто привязать несколько слушателей к нему.
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>
вы можете добавить несколько только по коду, даже если у вас есть второй 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>
вам нужно позаботиться о том, как события могут накапливаться, и если вы добавите много событий, вы можете потерять счет порядка, в котором они выполняются.
вы можете собрать все функции в одну и вызвать их.Библиотеки, как 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>
одно дополнение, для поддерживаемого 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);
Это также упрощает чтение и обслуживание вашего кода. Особенно если ваша функция больше.