2014-01-08 83 views
0

背景 我有一個引導模式是彈出窗口,並顯示輸入表單,如果用戶進行了更改,取消/關閉模式確認框將確定他們將失去的變化。返回事件虛假防止事件存在的事後

當模態完全關閉時,模態激發兩個事件,hidehidden

我攔截hide事件有:

.on('hide',function(){ 
    if(confirm('close')) 
     return true; 
    else 
     return false; 
}); 

如果我關閉對話框,點擊OK,該模式將關閉。

如果我點擊取消,模式將保持打開狀態(這是正確的),但是在它不會繼續默認事件後,我會點擊Ok。

  • 命中OK(作品)
  • 擊取消(作品)
  • 擊中取消後點擊OK(失敗)

我試圖preventDefault();很好,但我無法弄清楚如何獲得該事件在取消操作後繼續。

可以在這裏進行測試:

http://jschr.github.io/bootstrap-modal/

輸入控制檯:

$('#responsive').on('hide', function() { if(confirm('close)) return true; else return false;});

+0

看起來像你說的那樣,模態代碼中存在一個錯誤。 –

+0

@cookiemonster我不會說它的模態代碼,確認對話框通常不存在 - 我只是使用事件來攔截關閉它來添加一個確認框 –

+0

這是模態代碼,它定義了「隱藏」事件並回應返回值,不是嗎? –

回答

0

潛入模態管理器中的隱藏功能的自舉-modal.js線84的源代碼:

e && e.preventDefault(); 
e = $.Event('hide'); 
this.$element.trigger(e); 
if (!this.isShown || e.isDefaultPrevented()) return (this.isShown = false); <-- 
this.isShown = false; 
this.escape(); 
this.tab(); 

this.isShown設置爲false使恆定環路,它應該被設置爲真因爲當你觸發e.preventDefault()時,模態不會被隱藏。所以修復是:

if (!this.isShown || e.isDefaultPrevented()) return (this.isShown = true); 
0

您正在使用什麼版本的引導呢?

您是否將.on('hide')事件附加到模態元素?例如:

$('.modal').on('hide', function(){...}); 

我測試使用的示例標記你的JS代碼菲德爾(http://jsfiddle.net/5kbXZ/)從引導3一個模式,它是在Chrome金絲雀爲我工作。

+0

使用帶有模式管理器的最新版本,我附加了一個指向作者網站的鏈接,您可以通過控制檯對其進行測試。編輯:有趣的是,它的作品可能是事件順序或模式管理器。謝謝! –