2013-04-26 17 views
4

工作,請參閱此琴:jQuery的。對()事件的說法並不在Firefox

http://jsfiddle.net/e9uwA/1/

什麼是應該發生在這裏的是,小框應通過CSS過渡淡出,然後ontransitionend,調整更大的盒子的高度。它在Chrome,Opera中運行良好,但在Firefox中不起作用。

我認爲這與jQuery的.on()方法的第二個參數event有關。如果不允許的話,還有其他的選擇嗎?

謝謝!

哦,無視寫在小提琴的意見:)

回答

4

你有你的event處理有點南轅北轍。某些瀏覽器有一個名爲event的內置對象,恰好有一個stopPropagation()方法。 Firefox不。 jQuery優雅地處理這些差異,但你沒有正確使用它。

你的事件處理程序的形式是:

.on('eventName', event, function(){...}) 

他們應該

.on('eventName', function(evt){...}) 

哪裏evt是圍繞事件jQuery的包裝。

function start() { 
    $('.childDiv').addClass('faded').on('transitionend', function(evt){ 
     evt.stopPropagation(); 
     //I suppose this ended the event listener for the childDiv 
     $('.childDiv').off('transitionend'); 

     $('.parentDiv') 
      .addClass('no-height') 
      .on('transitionend',function(evt) { 
       //why is 'opacity' being read? any way to fix this? 
       alert(evt.propertyName); 
      }); 
    });  
} 

(但是,請注意,jQuery.Event不具有財產propertyName使最終alert將顯示undefined

活生生的例子:http://jsfiddle.net/qCKcg/

+0

似乎不讀evt.propertyName了在Chrome上。 :( – 2013-04-26 07:50:13

+1

@AJNaidas - 再看一次,你想要的東西是'evt.originalEvent.propertyName' - 可以在Chrome和FF中使用。 – Jamiec 2013-04-26 07:59:25

+0

明白了!謝謝!@Jamiec – 2013-04-26 08:12:07