2012-05-05 15 views
11

मेरे पास एक मॉडल jquery संवाद है और एक और तत्व है जो संवाद के पीछे ईएससी कुंजी घटना लेता है। जब jQuery संवाद चालू होता है, तो मैं नहीं चाहता कि यह ईएससी कुंजी ईवेंट प्रसारित करे। अब क्या होता है कि जब मैं ईएससी पर क्लिक करता हूं, तो यह संवाद बंद कर देगा और पृष्ठभूमि तत्व पर ईएससी ईवेंट हैंडलर को ट्रिगर करेगा।jQuery संवाद ईएससी कुंजी घटना को कैसे रोकें?

जब jQuery संवाद को खारिज कर दिया जाता है तो मैं ईएससी कुंजी ईवेंट कैसे खा सकता हूं?

उत्तर

18

आंतरिक jQuery यूआई के संवाद के closeOnEscape विकल्प स्वयं दस्तावेज़ के लिए एक keydown श्रोता संलग्न द्वारा कार्यान्वित किया जाता है । इसलिए, कुंजीपटल घटना शीर्ष स्तर तक सभी तरह से बुलबुले होने के बाद संवाद बंद हो जाता है।

तो यदि आप संवाद को बंद करने के लिए एस्केप कुंजी का उपयोग करना जारी रखना चाहते हैं, और आप एस्केप कुंजी को पैरेंट नोड्स में प्रचार करने से रोकना चाहते हैं, तो आपको closeOnEscape कार्यक्षमता को स्वयं के साथ-साथ उपयोग करने की आवश्यकता होगी इवेंट ऑब्जेक्ट पर stopPropagation विधि (MDN article on event.stopPropagation देखें)।

(function() { 
    var dialog = $('whatever-selector-you-need') 
    .dialog() 
    .on('keydown', function(evt) { 
     if (evt.keyCode === $.ui.keyCode.ESCAPE) { 
      dialog.dialog('close'); 
     }     
     evt.stopPropagation(); 
    }); 
}()); 

यह क्या होता है संवाद के भीतर होने वाली सभी कीडाउन घटनाओं के लिए सुनता है। यदि कुंजी दबाया जाता है तो बचने की कुंजी आप सामान्य के रूप में संवाद बंद कर देते हैं, और इससे कोई फर्क नहीं पड़ता कि evt.stopPropagation कॉल कुंजीपटल को पैरेंट नोड्स पर बुलबुले से रोकता है।

मेरे पास यह एक लाइव उदाहरण है जो इसे दिखा रहा है - http://jsfiddle.net/ud9KL/2/

+0

धन्यवाद। यह काम। –

+0

यह काम नहीं करता है, मैंने आपके jsfiddle में कीडाउन फ़ंक्शन के अंदर एक साधारण अलर्ट जोड़ा है और इसे कभी भी नहीं कहा जाता है :( – Yasser

+0

दुर्भाग्यवश बंदऑनएस्केप मेरे लिए काम नहीं करता है। लेकिन इस बाध्यकारी ने चाल की है। –

0

संवाद के पीछे आपके तत्व के लिए कोड को संशोधित करने की आवश्यकता होगी ताकि यह देखने के लिए कि संवाद खुला था या बचने की कुंजी दबाई गई थी और उस स्थिति को अनदेखा कर दिया गया था।

+0

धन्यवाद उपयोग कर सकते हैं। लेकिन बात यह है कि, जब मैंने ईएससी मारा, तो घटना पहले संवाद में जाती है और संवाद को खारिज कर देती है। केवल तभी यह मेरे पृष्ठभूमि तत्व पर जाता है, जो इस बिंदु पर पता लगाएगा कि संवाद वहां नहीं है और ईएससी कार्यक्रम लेता है। –

+0

संवाद खोले जाने पर पृष्ठभूमि तत्व से श्रोता को हटाने के बारे में क्या, और फिर संवाद बंद होने के बाद इसे फिर से जोड़ना क्या है? – j08691

+0

मुझे लगता है कि काम करेगा, लेकिन यह थोड़ा हैकी नहीं होगा? क्या ऐसा करने के लिए एक कम हैकी तरीका होगा? –

16

आप closeOnEscape जरूरत है ...

उदाहरण कोड:

$(function() { 
$("#popup").dialog({ 
height: 200, 
width: 400, 
resizable: false, 
autoOpen: true, 
modal: true, 
closeOnEscape: false 
}); 
}); 

यह लाइव देखें: http://jsfiddle.net/vutdV/

+1

उन्होंने यह नहीं कहा कि वह चाहते हैं कि संवाद बचने के करीब न हो, उन्होंने कहा कि वह अन्य तत्व नहीं चाहते हैं जो वार्तालाप खुला होने पर इसे अनदेखा करने के लिए भागने के लिए सुनता है। आपका रास्ता बचने से संवाद बंद करने की कार्यक्षमता को हटा देगा। – j08691

+0

उउ के पास एक बिंदु है। मैंने स्टाइल टैग संपादित किए हैं, इसलिए अभी भी एक "करीबी" लिंक उपलब्ध है। http://jsfiddle.net/vutdV/1/ फिर भी अंतिम समाधान वास्तव में नहीं। – andyderuyter

4

आप जवाब के लिए निम्नलिखित

$(document).keyup(function (e) { 
     if (e.keyCode == 27) { 

      $('#YourDialogID').dialog('close') 
     } 
    }); 
संबंधित मुद्दे