如何停止在Javascript函数中执行单击事件?

如何停止在Javascript函数中执行单击事件?,javascript,onclick,prototypejs,dom-events,Javascript,Onclick,Prototypejs,Dom Events,我试图将onclick事件分配给在单击另一个元素时已经存在的锚定标记。然而,我所尝试的一切似乎都会导致任务完成后立即触发事件。我们使用原型和脚本 这就是功能: <script type="text/javascript"> function loadData(step, dao_id) { var div_id = 'div_' + step; var anchor_id = 'step_anchor_' + step;

我试图将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>

函数加载数据(步骤,dao_id){
变量div_id='div_'+步长;
var-anchor\u-id='步骤\u-anchor\u'+步骤;
var prv=步骤-1;
开关(步骤){
案例1:
风险值行动='主要风险清单';
打破
案例2:
var action=‘校友名单’;
打破
案例3:
var动作=‘校友显示’;
打破
}
新的Ajax.Request('awizard.php'{
方法:“get”,
参数:{action:action,dao_id:dao_id},
onSuccess:函数(数据){
$(div_id).innerHTML=data.responseText;
//$(anchor_id)。观察('click',加载数据(prv,dao_id,true));
//事件。观察(锚定id,“点击”,警报(“我执行”);
showStep(步骤);
//$(anchor\u id).onclick=loadData(prv,dao\u id,true);
//$(anchor_id)。观察('click',加载数据(prv,dao_id,true));
}
}
)                   
}
功能显示步骤(步骤,切换回){
变量div_id='div_'+步长;
如果(!切换回){
如果(步骤!=1){
var prv=步骤-1;
expect.SlideUp('div_'+prv,{持续时间:1,延迟:0});
}
SlideDown(div_id,{持续时间:1,延迟:1});
出现('step_anchor_'+step,{持续时间:1,延迟:2});
}否则{
var prv=步骤-1;
SlideDown('div_u'+prv,{持续时间:1,延迟:0});
SlideUp(div_id,{持续时间:1,延迟:1});
淡入淡出('step_anchor_'+step,{持续时间:1,延迟:2});
}               
}
正如您所知,我尝试了多种方法将onclick事件分配给锚标记,但没有一种能正常工作。起初,我假设anchor标记上的Effect.aspect函数可能会触发onclick事件,所以我尝试将事件分配移动到showStep函数之后,但没有任何区别。此外,我尝试在赋值后立即调用stop()函数,但这也没有任何区别


我对此束手无策。我有没有办法将onclick事件分配给锚标记,而不让事件自动触发?我做错了什么?

函数是Javascript中的第一类对象,这意味着您可以将它们分配给变量,或者将它们作为参数传递给其他函数。在代码中,将函数调用与函数引用混淆

请看下面的代码:

$(anchor_id).observe('click', loadData(prv, dao_id, true));
它将调用“loadData”的结果传递给observe函数。您要做的是将引用传递给函数调用。通过将代码更改为以下内容,可以轻松修复此问题:

$(anchor_id).observe('click', function() { loadData(prv, dao_id, true) } );

函数是Javascript中的第一类对象,这意味着您可以将它们分配给变量或将它们作为参数传递给其他函数。在代码中,将函数调用与函数引用混淆

请看下面的代码:

$(anchor_id).observe('click', loadData(prv, dao_id, true));
它将调用“loadData”的结果传递给observe函数。您要做的是将引用传递给函数调用。通过将代码更改为以下内容,可以轻松修复此问题:

$(anchor_id).observe('click', function() { loadData(prv, dao_id, true) } );