2013-01-04 11 views
12

पर एक बाध्यता है, मेरे पास एक परिदृश्य है जहां क्लिक ईवेंट <tr> से जुड़ा हुआ है और के अंदर <td? के अंदर चेकबॉक्स को चेकबॉक्स से बांध दिया गया है। अब समस्या यह है कि जब पंक्ति पर क्लिक किया जाता है तो ईवेंट ठीक से निकाल दिया जाता है। लेकिन अगर मैं चेकबॉक्स पर क्लिक करता हूं तो पंक्ति के लिए अवलोकन योग्य मान भी बदलता है और पंक्ति क्लिक ईवेंट को सक्रिय करता है। इस परिदृश्यपंक्तियों में फायरबॉक्स पर क्लिक करें पंक्ति नॉकआउट बाध्यकारी

<tbody data-bind="foreach:Mails"> 
    <tr data-bind="click:$root.navigateToMail"> 
     <td style="width: 15px"> 
      <input type="checkbox" data-bind="checked: isSelected"> 
      @*<input type="checkbox">*@ 
     </td> 
     <td data-bind="text: From"> 
     </td> 
     <td data-bind="text: To"> 
     </td> 
     <td data-bind="text: Subject"> 
     </td> 
     <td data-bind="text: MailDate"> 
     </td> 
    </tr> 
</tbody> 

से बचने के लिए कैसे घटनाओं हैं:

ko.utils.arrayForEach(data.mails, function (mail) { 
        mail.isSelected = ko.observable(false); 
        mail.isSelected.subscribe(function (myvalue) { 
         console.log(myvalue); 
        }); 
       }); 
self.navigateToMail = function (mail) { 
     location.hash = mail.Folder() + '/' + mail.Id(); 
    }; 

मैं अनावश्यक कोड छंटनी की। बस समस्या है कि कहां हुआ है।

+0

अगर जवाब आप मदद की, यह के रूप में ऐसी –

उत्तर

22

आपको अनिवार्य रूप से क्लिक पर ईवेंट बबलिंग को रद्द करने की आवश्यकता होगी।

यहाँ आप ऐसा कर सकते हैं कि कैसे का एक उदाहरण है:

<div data-bind="click: parentClick"> 
    <input type="checkbox" data-bind="checked: isSelected, click: function(){return true}, clickBubble: false"> 
</div>​ 

यहाँ देखें: http://jsfiddle.net/2M9XP/1/

+1

धन्यवाद स्वीकार करें! मैं इसे 'क्लिकबबल: झूठी' के साथ आज़मा रहा था, लेकिन मुझे एहसास नहीं हुआ कि मुझे स्पष्ट रूप से क्लिक ईवेंट को संभालना था। विचारों का क्रमबद्ध करें चेक किए गए बाध्यकारी इसे कवर करेंगे। – jes

+0

मैं घंटों के लिए इसे ठीक करने की कोशिश कर रहा हूं। आपका बहुत बहुत धन्यवाद! –

+1

आज आप मेरे हीरो हैं – stackoverfloweth

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