JavaScript 기능에서 클릭 이벤트가 실행되는 것을 중지하는 방법은 무엇입니까?
-
08-07-2019 - |
문제
OnClick 이벤트를 다른 요소를 클릭 할 때 이미 존재하는 앵커 태그에 OnClick 이벤트를 할당하려고합니다. 그러나 내가 시도한 모든 것은 과제 직후 이벤트가 발사되는 것으로 보입니다. 우리는 프로토 타입과 스크립트를 사용하고 있습니다.
이것은 기능입니다.
<script type="text/javascript">
function loadData(step, dao_id) {
var div_id = 'div_' + step;
var anchor_id = 'step_anchor_' + step;
var prv = step -1;
switch(step) {
case 1:
var action = 'major_list';
break;
case 2:
var action = 'alumni_list';
break;
case 3:
var action = 'alumnus_display';
break;
}
new Ajax.Request('awizard.php', {
method: 'get',
parameters: {action : action, dao_id : dao_id},
onSuccess: function(data) {
$(div_id).innerHTML = data.responseText;
//$(anchor_id).observe('click', loadData(prv, dao_id, true));
//Event.observe(anchor_id, 'click', alert('I executed'));
showStep(step);
//$(anchor_id).onclick = loadData(prv, dao_id, true);
//$(anchor_id).observe('click', loadData(prv, dao_id, true));
}
}
)
}
function showStep(step, toggleBack) {
var div_id = 'div_' + step;
if(!toggleBack) {
if(step != 1) {
var prv = step -1;
Effect.SlideUp('div_' + prv, { duration:1, delay:0 });
}
Effect.SlideDown(div_id, { duration:1, delay:1 });
Effect.Appear('step_anchor_' + step, { duration:1, delay:2 });
} else {
var prv = step -1;
Effect.SlideDown('div_' + prv, { duration:1, delay:0 });
Effect.SlideUp(div_id, { duration:1, delay:1 });
Effect.Fade('step_anchor_' + step, { duration:1, delay:2 });
}
}
</script>
당신이 말할 수 있듯이, 나는 OnClick 이벤트를 앵커 태그에 할당하는 여러 가지 방법을 시도했지만 그 중 어느 것도 제대로 작동하지 않습니다. 처음에는 앵커 태그의 Effect.Appear 함수가 OnClick 이벤트를 발사 할 수 있다고 가정 했으므로 Showstep 기능 이후 이벤트 할당을 옮기려고했지만 아무런 차이가 없었습니다. 또한 할당 직후에 Stop () 함수를 호출하려고했지만 아무런 차이가 없었습니다.
나는 이것으로 내 재치가 끝났다. 이벤트를 자동으로 발사하지 않고 OnClick 이벤트를 앵커 태그에 할당하는 방법이 있습니까? 내가 뭘 잘못하고 있죠?
해결책
함수는 JavaScript의 일류 객체이므로 변수에 할당하거나 다른 기능에 인수로 전달할 수 있습니다. 코드에서는 기능 호출을 함수에 대한 참조와 혼동하고 있습니다.
이 코드를 살펴보십시오.
$(anchor_id).observe('click', loadData(prv, dao_id, true));
이것이 무엇을 하는가는 "loadData"로 호출 결과를 관찰 함수로 전달합니다. 당신이하고 싶은 것은 대신 함수 호출에 대한 참조를 전달하는 것입니다. 코드를 변경하여 쉽게 고칠 수 있습니다.
$(anchor_id).observe('click', function() { loadData(prv, dao_id, true) } );
제휴하지 않습니다 StackOverflow