2013-03-21 35 views
1

如何隱藏使用knockout.js外面點擊一個div ...我已經試過,但沒有成功..隱藏使用敲除的外部點擊div?

HTML:

<body> 
<div data-bind="visible: show"> 
    <h3>hello world</h1> 
</div> 

<input type='button' data-bind="click: showBox" value="show"/> 

    <body> 

腳本:

var viewModel = function() 
{ 
    self = this; 
    self.show = ko.observable(false); 
    self.showBox = function(){ 
      self.show(true); 
     $("body").one("click", function(){ 

       self.show(false); 
     }); 
    }; 
} 

ko.applyBindings(new viewModel()); 

Here is fiddler example:

回答

4

既然你想要只有當用戶點擊除div以外的任何地方時,纔會隱藏div,您必須將stopPropagation()添加到div的點擊事件,以及按鈕的單擊事件,否則主體的點擊事件將立即觸發,每次嘗試時都會隱藏div點擊按鈕。請注意,這將使它如此點擊按鈕,一旦div顯示不會使div被隱藏......您還需要將$("body").on("click"...移動到showBox之外。

型號:

var viewModel = function() 
{ 
    self = this; 
    self.show = ko.observable(false); 
    self.showBox = function(){ 
      self.show(true); 
    }; 
    $("body").on("click", function(){ 
     self.show(false); 
    }); 
} 

ko.applyBindings(new viewModel()); 

的HTML:

<div data-bind="visible: show, click: function(data, event) { event.stopPropagation(); }"> 
    <h3>hello world</h1> 
</div> 

<input type='button' data-bind="click: function(data, event) { showBox(data); event.stopPropagation(); }" value="show"/> 

和工作fiddle

+0

沒有我想隱藏,如果用戶點擊,除了特定的div – 2013-03-21 16:49:54

+1

上文件的任何地方改變了答案做你想做的事。 – jonhopkins 2013-03-21 17:01:15

+0

感謝您的詳細解答! – 2013-03-21 17:31:24