2008-11-15 5 views
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 для анкерного тега, и ни один из них не работает должным образом. Сначала я предположил, что функция 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) }); 
Смежные вопросы