onclick 이벤트에서 여러 JavaScript 함수를 호출하는 방법은 무엇입니까?


답변:


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

그러나 실제로 onclickJavascript 코드를 통해 이벤트 핸들러를 DOM 노드에 연결 하지 않고 이벤트 핸들러를 사용하지 않는 것이 좋습니다 . 이를 눈에 잘 띄지 않는 자바 스크립트라고 합니다.


1
눈에 거슬리지 않는 JS에 대한 참조에 감사드립니다.이 문제를 전에 보았으므로 게으 르기 때문에 눈에 거슬리는 JS를 작성하지 마십시오! xD
Qcom

9
문제가 없습니다 ... 또한 jQuery를 강력하게 추천합니다. 이벤트 핸들러를 DOM 요소에 쉽게 첨부 할 수 있으며 훨씬 더 많은 작업을 방해하지 않습니다. 나는 그것을 2 년 동안 사용해 왔으며 결코 뒤돌아 보지 않았습니다.
brad

4
onclick에서 하나의 호출 된 조치가 실패하면 모든 것이 도미노 체인처럼 떨어지고 onclick이 작동하지 않습니다.
Fiasco Labs

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
IMHO, 이것이 진정한 프로그래머의 접근법입니다.
b1nary.atr0phy

2
@ b1nary.atr0phy nope. 프로그래머 방법은 사용자에게 자바 스크립트가없는 경우 href = ""속성을 추가하는 것입니다. 그런 다음 자바 스크립트 (사용자가 지원한다는 것을 알 수 있음)를 사용하여 href를 제거하고 이벤트 리스너를 이벤트에 추가하십시오. 이렇게하면 코드의 다른 모듈이 동일한 클릭을 수신하더라도 코드를 덮어 쓰거나 덮어 쓰지 않습니다. 읽기 : developer.mozilla.org/en-US/docs/Web/API/Event
gcb

3
함수에 전달되는 인수가있는 경우, 특히 서버 측 언어에서 해당 인수를 생성하는 경우에는 제대로 작동하지 않을 수 있습니다. 서버와 클라이언트 모두에서 가능한 모든 반복을 테스트하는 대신 서버 측 언어 내에서 함수와 인수를 추가하여 코드를 작성 / 유지하는 것이 더 쉬울 것입니다.
사이펀

이것은 매우 아름답고 우아합니다
Tessaracter

38

이것은 jQuery가 아닌 JavaScript 만 사용하는 경우 필요한 코드입니다.

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메서드를 사용하여 함수에 연결합니다. 이 함수에서 여러 함수를 호출 할 수 있습니다.

이벤트를 단일 함수에 바인딩 한 다음 여러 함수를 호출 할 때의 이점은 오류 검사를 수행하고 if else 문을 사용하여 특정 기준을 충족하는 경우에만 일부 함수가 호출되도록 할 수 있다는 것입니다.


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로 짧게 자르고있었습니다. 네이티브 이벤트 리스너 코드를 정확히 기억하지 못합니다. Marko가 언급 한 내용을 수행 할 수도 있지만 이벤트 리스너를 사용하는 것이 좋습니다.
Josh K

1
원래 질문에 대답하지 않았을 수도 있지만 jQuery를 사용하고 있기 때문에 대답했습니다.
Fiasco Labs

1
평범한 오래된 자바 스크립트로 이것을 할 수있는 방법이 있습니까?
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

onclickHTML에서 두 번째 속성이 무시되고 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

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

이것은 brad anser의 대안입니다 -다음과 같이 쉼표를 사용할 수 있습니다

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

그러나이 접근법을 사용하지 않는 것이 좋습니다. 작은 프로젝트의 경우 함수 호출이 하나 인 경우에만 onclick을 사용할 수 있습니다 (추가 : 눈에 띄지 않는 javascript 업데이트 ).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.