2013-03-13 6 views
5

पर बाध्यकारी क्लिक करता है मेरे पास एक मेनू है कि प्रत्येक आइटम अपने स्वयं के सबमेनू को टॉगल करता है, यहां नमूना कोड है। के रूप में आप सबमेनू आइटम देख सकते हैं एक टैग है कि बाहर लिंक Google.co.nz कोKnockout.js: बच्चे एक टैग काम नहीं कर रहा है जब मूल ली तत्व

<ul id="menuHolder"> 
    <li data-bind="click: showMenu.bind($data, 1)"> 
     Main menu item 
     <ul class="submenu" data-bind="visible: selected() == '1'"> 
      <li> 
       <a class="sub-item" href="http://google.co.nz"> 
        Submenu item 
       </a> 
      </li> 
     </ul> 
    </li> 
</ul> 
<script type="text/javascript"> 
    var menuModel = function() { 
    var self = this; 
    self.selected = ko.observable(0);   
    self.showMenu = function (data) { 
     var s = self.selected(); 
     if (s > 0 && data == s) 
      self.selected(0); 
     else 
      self.selected(data); 
    };  
} 
ko.applyBindings(new menuModel(), document.getElementById("menuHolder")); 
</script> 

सब कुछ एक टैग नहीं रह गया काम करता है, यहाँ क्या गलत है काम करता है केवल?

उत्तर

7

आपकी समस्या निम्न है: लिंक पर क्लिक करने से क्लिक ईवेंट बढ़ता है जो आपके showMenu फ़ंक्शन द्वारा संभाला जाता है और डिफ़ॉल्ट रूप से केओ ब्राउज़र के डिफ़ॉल्ट व्यवहार को ट्रिगर नहीं करेगा, इसलिए आपका लिंक नहीं खुल जाएगा।

<a class="sub-item" href="http://google.co.nz" 
    data-bind="click: function(){ return true }, clickBubble: false" > 
     Submenu item 
</a> 
:

आप क्या जरूरत है अपने लिंक जो रिटर्न true इस KO बताता ब्राउज़र डिफ़ॉल्ट व्यवहार को गति प्रदान करने और आप भी अपने showMenu निष्पादन को रोकने के लिए false को clickBubble गुण सेट करने के लिए आवश्यकता हो सकती है पर एक क्लिक के ईवेंट हैंडलर जोड़ने के लिए है

documentation में बाध्यकारी क्लिक के बारे में अधिक पढ़ सकते हैं।

डेमो JSFiddle.

संबंधित मुद्दे