2009-06-23 8 views
5

मेरे पास एक div है जो संतुष्ट संपत्ति को सही साबित कर दिया गया है। मैं बच्चों को कीबोर्ड कार्यक्रमों का जवाब देने के लिए कैसे प्राप्त करूं? लगता है कि माता-पिता div में घटनाओं को कैप्चर करना और चयन एपीआई के माध्यम से बच्चे को समझना एकमात्र तरीका है। क्या कोई बेहतर तरीका है? अधिक विशेष रूप से, क्या मैं बाल तत्वों के लिए एक कीबोर्ड ईवेंट हैंडलर संलग्न कर सकता हूं? क्या मैं कुछ भूल रहा हूँ?एक सामग्री योग्य div में बाल तत्वों के लिए कुंजीपटल घटनाओं?

संलग्न नमूना कोड है जो समस्या को दर्शाता है। उम्मीद है कि इन-कोड टिप्पणियां पर्याप्त व्याख्यात्मक हैं।

<HTML> 
<HEAD> 
<TITLE></TITLE> 
</HEAD> 

<BODY> 
<div id="editable" contentEditable='true' style='height: 130px; width: 400px; border-style:solid; border-width:1px'> 
    <span id="span1" onkeypress="alert('span1 keypress')">test text 1</span> <!-- does not work --> 
    <span id="span2" > test text2</span> 
    <span id="span3" onclick="alert('span3 clicked')">test text 3</span> <!-- this works fine --> 
</div> 
<!-- Uncomment this to set a keypress handler for span2 programatically. still doesnt work --> 
<!-- 
<script type="text/javascript"> 
    var span2 = document.getElementById('span2'); 
    span2.onkeypress=function() {alert('keypressed on ='+this.id)}; 
</script> 
--> 

<!-- Uncomment this to enable keyboard events for the whole div. Finding the actual child that the event is happening on requires using the selection api --> 
<!-- 
<script type="text/javascript"> 
    var editable = document.getElementById('editable'); 
    editable.onkeypress=function() {alert('key pressed on ='+this.id+';selnode='+getSelection().anchorNode.parentNode.id+',offset='+getSelection().getRangeAt(0).startOffset)}; 
</script> 
--> 
</BODY> 
</HTML> 

उत्तर

3

ऐसा इसलिए है क्योंकि नियमित अवधि और divs फोकस प्राप्त करने में असमर्थ हैं। टैग में tabindex विशेषता जोड़ने या इसे संपादित करने के द्वारा आप एक सामान्य अवधि या div फोकस कर सकते हैं। आप बच्चे की अवधि पर tabindex नहीं चाहते हैं क्योंकि ऐसा लगता है कि यह आईई में संपादन योग्य है। मैं target/srcElementEvent ऑब्जेक्ट्स को keypress हैंडलर को पूरे div के लिए पास किया गया है, लेकिन आईई में यह केवल आपको बच्चे की अवधि के बजाय एक ही div का संदर्भ देता है।

तो आपके प्रश्न के उत्तर में, मुझे विश्वास नहीं है कि यह चयन करने के लिए चयन का उपयोग करने के बजाय बेहतर क्रॉस-ब्राउज़र समाधान है कि चरित्र कहां टाइप किया गया था।

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