我創建了一些自定義的「彈出窗口」(最初用「display:none;」樣式),通過相鄰的「.popup_trigger」鏈接以下總結功能:jQuery的event.stopPropagation()導致Rails的問題:remote => true
# /public/javascripts/application.js
jQuery(document).ready(function(){
// Trigger a popup
jQuery('.popup_trigger').live('click', function(event) {
jQuery(this).next('.popup').toggle(0, function() {
// Prevent the jQuery('body').click() below if the click occurs inside the popup
jQuery(this).click(function(event){
event.stopPropagation();
});
});
return false;
});
// "Outside" click hides popup
jQuery('body').click(function() {
jQuery('.popup:visible').toggle();
});
});
這適用於顯示彈出窗口,然後在發生「外部」單擊時隱藏它們。然而,這樣一個彈出裏面我有以下幾點:
<%= link_to 'Delete medical record', medical_record, :confirm => 'Permanently delete this medical record?', :method => :delete, :remote => true %>
這使得如下:
<a href="/medical_records/1" data-confirm="Permanently delete this medical record?" data-method="delete" data-remote="true" rel="nofollow">Delete medical record</a>
我的問題是,當我觸發顯示彈出式窗口,將event.stopPropagation();
調用似乎禁用遠程這個鏈接的功能。也就是說,當我點擊該鏈接時,它會發送一個普通的(非遠程)GET請求'/ medical_records/1',它會查找show動作而不是銷燬。
如果我在上面的JS中註釋掉event.stopPropagation();
,遠程鏈接工作正常,但彈出窗口隱藏,當我點擊裏面。
我該怎麼做才能讓它彈出,只有當它被點擊後才能隱藏活動彈出框,並且還允許遠程鏈接工作?
謝謝。
我有同樣的問題,試圖修改twitter-bootstraps的下拉對話框的行爲。查看https://github.com/rails/jquery-ujs/blob/master/src/rails.js,看起來他們將事件委託人附加到數據遠程對象的文檔中。我認爲,當頁面上的內容發生變化時,它提供了一個很好的用戶體驗,但也很煩人,因爲這意味着鏈接上的點擊必須冒泡到文檔中。不知道如何解決這個問題... – Woahdae 2012-03-18 03:52:10