javascript
  • javascript-events
  • onclick
  • prototypejs
  • 2008-11-15 138 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) }); 
    
    相關問題