javascript
  • javascript-events
  • onclick
  • prototypejs
  • 2008-11-15 147 views 0 likes 
    0

    我正在尝试将onclick事件分配给当我单击另一个元素时已经存在的定位标记。然而,我所尝试过的所有事情似乎都会导致在任务结束后立即发起事件。我们正在使用Prototype和Scriptaculous。如何停止单击JavaScript函数中执行的事件?

    这是函数:

    <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事件的定位标记的多种方式,其中没有正常工作。起初我假定Anchor标签上的Effect.Appear函数可能会触发onclick事件,所以我尝试将事件分配移到showStep函数后面,但这没有任何区别。另外,我试着在赋值之后立即调用stop()函数,但也没有任何区别。

    我在我的智慧结束与此。有没有办法让我将onclick事件分配给锚标签而不让事件自动触发?我究竟做错了什么?

    回答

    3

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

    看看这个代码:

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

    这里做的事情是通过调用“loadData”的观察函数的结果。你想要做的就是传递函数调用的引用。您可以通过将代码更改为:

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