2011-11-28 13 views
23

मैं KnockoutJs में एक स्क्रिप्ट टेम्पलेट के रूप में निम्न तालिका पंक्ति है:मैं event.preventDefault का उपयोग कैसे नॉकआउटजे के साथ ईवेंट हैंडलर पर क्लिक करूं?

<script id="inboxTemplate" type="text/html">   
    <tr data-bind="click: function() { viewInboxModel.selectAction($data); }">         
     <td>...</td>     
     <td>${ CreateDate }</td>    
     <td data-bind="click: function(e){ e.preventDefault();viewInboxModel.clearAction($data); }"><img src="/Content/images/delete.png" height="16px" width="16px"> </td> 
    </tr>    
    </script> 

समस्या जब मैं हटाएँ बटन पर क्लिक, यह भी selectAction() विधि चल रहा है है। मैंने e.preventDefault() दोनों का चयन करने के लिए selectAction क्लिक हैंडलर और clearAction() क्लिकर हैंडलर का लाभ उठाया है। क्या वैसे भी KnockoutJs हटाए गए बटन पर क्लिक होने पर अंतर्निहित पंक्ति को क्लिक करने से रोक सकता है?

उत्तर

27

यदि आपके पास jQuery संदर्भित है, तो आप अपने हैंडलर में सुरक्षित रूप से e.stopImmediatePropagation(); पर कॉल कर सकते हैं, क्योंकि यह jQuery ईवेंट ऑब्जेक्ट को पारित कर दिया गया है।

e.cancelBubble = true; 
if (e.stopPropagation) e.stopPropagation(); 

http://jsfiddle.net/rniemeyer/mCxjz/

+0

यह पूरी तरह से काम करता है – MilkyWayJoe

+0

अपने jsFiddle में, "दो" हैंडलर क्लिक करें ठीक से करने के लिए प्रचार से घटना को रोकने नहीं है: आप jQuery का उपयोग नहीं कर रहे हैं, तो आप अभी भी कुछ ऐसा कर सकता है क्रोम के मेरे वर्तमान संस्करण में "एक" हैंडलर क्लिक करें। – mkmurray

+2

@mkmurray यह पहेली github से नवीनतम केओ संदर्भित करता है, लेकिन केओ 2.0 से पहले बनाया गया था। केओ 2.0 में, डेटा हैंडलर और इवेंट दूसरे के पहले तर्क के रूप में डेटा को पारित करने के लिए एक तोड़ने वाला परिवर्तन था। सही हस्ताक्षर का उपयोग करने के लिए अब फिल्ड अपडेट किया गया है। –

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