JavaScript 기능에서 클릭 이벤트가 실행되는 것을 중지하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/292723

문제

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) } );
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top