2009-11-10 9 views
13

मेरी साइट पर मैंने पूरे दस्तावेज़ के लिए एक कीप्रेस ईवेंट हैंडलर पंजीकृत किया है।केवल एक तत्व के लिए JQuery कुंजीपटल ईवेंट को अक्षम कैसे करें?

$(document).keypress(myhandler); 

और मैं सूची को स्क्रॉल करने के लिए 'स्पेस' कुंजी को संभालता हूं।

समस्या है, <input type='text' /> तत्व है, और मैं इनपुट में दर्ज होने पर सूची को स्क्रॉल करने के लिए 'स्पेस' कीप्रेस नहीं चाहता हूं।

मुझे JQuery द्वारा हैंडलर द्वारा पारित "ईवेंट" ऑब्जेक्ट में कोई जानकारी नहीं मिली, यह पहचानने के लिए कि घटना का स्रोत कहां है।

उत्तर

18

वैकल्पिक रूप से, आप इनपुट क्षेत्र के लिए एक और ईवेंट हैंडलर देते हैं सकता है, और इस हैंडलर में घटना के प्रसार को रोकने के लिए:

jQuery('#input-field-id').bind('keypress', function(e) { 
    e.stopPropagation(); 
}); 

इस तरह, आप ग्लोबल इवेंट हैंडलर को छोड़ सकते हैं। क्लीनर हो सकता है।

+0

निश्चित रूप से क्लीनर। – HRJ

+2

'e.stopPropagation(); के बजाय ' ' e.preventDefault();' ' –

3

आप event.target.id के लिए देख रहे हैं, जो इस घटना को उठाए गए तत्व की आईडी होगी। तो myhandler अंदर आप event order के बारे में quirksmode डॉक्स देखें, और विशेष रूप से कैसे दूर घटनाओं चालू करने के लिए है, जो ब्राउज़र-विशिष्ट है के बारे में निम्नलिखित

function myhandler(e) { 
    if (e.target.id !== 'id of input') { 
     /* rest of event handler */ 
    } 
} 
+0

यह काम करता है! धन्यवाद! – HRJ

1

की तरह कुछ की आवश्यकता होगी। उद्धरण:

एक पूर्ण पार ब्राउज़र अनुभव

function doSomething(e) 
{ 
    if (!e) var e = window.event; 
    e.cancelBubble = true; 
    if (e.stopPropagation) e.stopPropagation(); 
} 
संबंधित मुद्दे