2013-08-05 147 views
0

我有以下JQuery的模塊,摺疊頁面上的形式,使點擊一個按鈕,就會發現它:JQuery的click事件不工作的Firefox

(function (jQuery) { 
    "use strict"; 

    //Attach this new method to jQuery 
    jQuery.fn.extend({ 

    module_content_form_expander: function (options) { 

     // Iterate over the current set of matched elements 
     return this.each(function() { 

     var form_expander_thing = jQuery(this); 
     var strButtonInit = options.initial_button_text; 
     var strButtonActive = options.active_button_text; 

     var module_thing = form_expander_thing.find('.module-content'); 
     var content = form_expander_thing.find('.visible-content'); 
     var button = form_expander_thing.find('.trigger'); 
     var cancel = form_expander_thing.find('.cancel-action'); 

     module_thing.hide(); 
     content.css('opacity', 0); 
     button.css('margin-top', '0.7em'); 
     button.attr('value', strButtonInit); 

     button.on('click', function (e) { 
      if (!content.is(':visible')) { 
      e.preventDefault(); 
      jQuery(this).hide(); 
      jQuery(this).removeClass('action-primary'); 
      jQuery(this).addClass('action-secondary'); 
      jQuery(this).attr('disabled', 'disabled'); 

      module_thing.slideToggle(300, function() { 
       content.animate({'opacity': 1}); 
       button.attr('value', strButtonActive); 
       button.css('margin-top', '0'); 
       button.fadeIn(); 
       cancel.css('display', 'block'); 
      }); 
      } 
     }); 

     cancel.on("click", function (ev) { 
      ev.preventDefault(); 
      jQuery(this).hide(); 
      button.removeClass('action-secondary'); 
      button.addClass('action-primary'); 
      content.css('opacity', 0); 
      module_thing.slideToggle(300, function() { 
      button.css('margin-top', '0.7em'); 
      button.attr('value', strButtonInit); 
      button.removeAttr('disabled'); 
      jQuery('.required').val(''); // Need non-required elements cleared too, perhaps? 
      var $newNoteTagInput = $('#tag_list'); 
      if ($newNoteTagInput.length) { 
       $newNoteTagInput.tokenInput('clear'); 
       $newNoteTagInput.blur(); // Hides dropdown. 
      } 
      }); 
     }); 
     }); 
    } 
    }); 

})(jQuery); 

在頁面加載,它的觸發像這樣:

var app = { 
    initApp : function() { 
     jQuery('form#new-placement-form.expandable-module').module_content_form_expander({'initial_button_text': 'Add a new placement', 'active_button_text': 'Add' }); 
    } 
} 

jQuery(function() { 
    app.initApp(); 
} 

它工作正常,它也可以在Chrome中刷新頁面後工作。但是,在Firefox上,它只有在第一次加載頁面時才起作用。刷新後,它什麼都不做。去一個不同的頁面,然後通過鏈接返回使其再次工作。

Firebug顯示單擊按鈕時未連接到button事件的點擊處理程序,雖然沒有錯誤,但看起來好像連接正常。

這可能是什麼原因造成的?

回答

0

你自己寫了所有的代碼,還是從別的地方得到它?你確定on.click處理程序應該在jQuery.fn.extend函數中嗎?

而且,一切都包裹在裏面

$(document).ready(function() { 
----- 
}); 
+0

是的,我寫了,但我不太清楚,如果我錯過了一些重要的東西。我已更新以顯示在頁面加載時如何調用它。我還可以在哪裏放置點擊處理程序(這是重複使用多個窗體)? –

0

原來,形式的東西擴張,與它的禁用「擴展」按鈕是造成火狐記得頁面刷新禁用狀態。

此處瞭解詳情:Jquery UI button gets disabled on refresh

我通過每一次按鈕,清除處於禁用狀態的頁面加載固定它。