मैं चाहता हूं कि मेरे (एक्स्टजेएस) टूलबार बटन पर क्लिक न होने पर वेब पेज पर ध्यान केंद्रित करने के लिए, लेकिन क्लिक द्वारा अपरिवर्तित फोकस छोड़ते समय उनकी "चीज़" करने के लिए। मैं उसको कैसे करू?फोकस लेने के लिए बटन कैसे प्राप्त करें?
उत्तर
मुझे नहीं लगता कि ऐसा करने का एक आसान तरीका है जिसे आप करना चाहते हैं क्योंकि यह ब्राउज़र का डिफ़ॉल्ट व्यवहार है।
आप निश्चित रूप से बटन को क्लिक कर सकते हैं जैसे ही क्लिक किया जाता है, लेकिन यह बस सबकुछ अनदेखा कर देगा। पहले सक्रिय ऑब्जेक्ट को फोकस प्राप्त करने के लिए, आपको प्रत्येक तत्व के लिए धुंध हैंडलर जोड़कर एक प्रकार की "मेमोरी" बनाना होगा ताकि यह पता चल सके कि किस तत्व ने आखिरी फोकस किया था (वैश्विक में तत्व की आईडी स्टोर करें और जब कोई तत्व फोकस खो देता है तो इसे अपडेट करें)।
क्योंकि टूलबार बटन केवल सामान्य HTML बटन तत्वों को स्टाइल कर रहे हैं, तो यह एक वास्तविक ब्राउज़र व्यवहार है, और आपको इसे बदलने से पहले दो बार सोचना चाहिए। लेकिन फिर भी ...
आप हैंडलर से केवल false
लौटकर कपास को ध्यान से प्राप्त करने से रोकने में सक्षम होना चाहिए।
धन्यवाद रेन मैंने सोचा कि यह सही दृष्टिकोण था, लेकिन जब मैंने कोशिश की तो यह काम नहीं कर रहा था।{OnBlur: fieldExit} जहां fieldExit एक lastField चर में बुला वस्तु डालता है, तो बटन 'हैंडलर के अंत में (वे सभी एक ही एक का उपयोग करें) एटीएम मैं एक बुरा समाधान जहां प्रत्येक फार्म पर मैं डिफ़ॉल्ट सेट को लागू किया है मैं lastField.focus() करते हैं। यह टेक्स्ट फ़ील्ड के लिए काम करता है, लेकिन विचित्र रूप से चेकबॉक्स के लिए नहीं (मैंने अभी तक अन्य लोगों का परीक्षण नहीं किया है)। –
आप बटन * रखते हुए * फोकस रोका जा सकता है, लेकिन आप जब क्लिक पर इस तरह के – annakata
का ट्रैक रखने के लिए यह ध्यान देने के रद्द करने के लिए बहुत देर हो चुकी फायरिंग कर रहा है बिना पिछले तत्व पर वापस फ़ोकस नहीं कर सकते। जैसा कि मैंने उपर्युक्त बताया है कि डिफ़ॉल्ट व्यवहार को रोकने से ऑनमोडाउन में किया जाना चाहिए। यह "ऑनक्लिक" को नहीं रोकेगा लेकिन यह फोकस परिवर्तन को रोक देगा। कम से कम वेबकिट ब्राउज़र में। – real4x
शायद आपको stateful
और फॉर्म फ़ील्ड के लिए राज्य परिवर्तन गुणों का उपयोग करने की कोशिश करनी चाहिए या जो कुछ भी वापस ध्यान केंद्रित करना चाहिए?
document.activeElement वर्तमान में केंद्रित तत्व संग्रहीत करता है।
तो अपने उपकरण पट्टी पर, तो आप इस समारोह के लिए एक "mousedown" हैंडलर जोड़ सकते हैं:
function preventFocus() {
var ae = document.activeElement;
setTimeout(function() { ae.focus() }, 1);
}
इस उदाहरण का प्रयास करें:
<html>
<head>
<script>
function preventFocus() {
var ae = document.activeElement;
setTimeout(function() { ae.focus() }, 1);
}
</script>
</head>
<body>
<input type="text"/>
<input type="button" onmousedown="preventFocus()" onclick="alert('clicked')" value="Toolbar" />
</body>
</html>
मुझे नहीं लगता कि यह काम करेगा करते हैं - बार जब आप इसे बटन निष्पादित कर सकते हैं द्वारा सक्रिय तत्व है। – annakata
यह काम करेगा। परिवर्तनीय एई बंद के अंदर संग्रहीत है, और नहीं बदलेगा। – Alsciende
फ़ायरफ़ॉक्स, क्रोम, ओपेरा, आईई 7 के तहत परीक्षण किया गया: काम करता है। सफारी पर विफल – Alsciende
मैं सभी क्षेत्रों के लिए एक कलंक घटना श्रोता देते हैं। इस श्रोता को वैश्विक चर में फोकस खोने वाले क्षेत्र को सहेजना चाहिए।
फिर सभी टूलबार बटन को एक फोकस ईवेंट श्रोता मिलना चाहिए। इस श्रोता को फ़ील्ड पर ध्यान देना चाहिए, जो ऊपर वर्णित अनुसार सहेजा गया था।
// Prevent capturing focus by the button.
$('button').on('mousedown',
/** @param {!jQuery.Event} event */
function(event) {
event.preventDefault();
}
);
का परीक्षण नहीं किया onmousedown
के डिफ़ॉल्ट व्यवहार को रद्द कर रहा है ध्यान केंद्रित हो रहा से एक तत्व से बचाता है आपको एक डमी तत्व बनाना होगा, मुझे इस स्थिति में सबसे अच्छा काम करने के लिए बटन मिले। बटन को एक div में रखें और div 0px बनाएं।
[div प्रदर्शन से कोई भी नहीं बनाते हैं, कुछ ब्राउज़र बस इसे अनदेखा करेगा]
मूल रूप से किसी भी क्लिक या बटन प्रेस, यह इस डमी बटन पर ध्यान दिया जाएगा। मेरे पास एक प्रोजेक्ट बहुत समान था और जब भी उन्होंने डाउन कुंजी दबाया तो उसने पृष्ठ पर पहला बटन चुना, यह बस बार-बार बटन पर केंद्रित है।
जैक अप का क्रमबद्ध करें, लेकिन यह काम करता है।
<script>
function focusor(){
document.getElementById('focus').focus;
}
document.onkeydown = focusor;
document.onclick = focusor;
</script>
<div style="width: 0px; height: 0px; overflow: hiddden;">
<button id="focus"></button>
</div>
मैं क्या पाया है, यह है:
इस कोड को काम करना चाहिए, हालांकि यह यह
+1 बिल्कुल ठीक है। – annakata
Thabks एलन - कि काफी अभी मैं क्या कर रहा हूँ ... चिपचिपा है, लेकिन है (ज्यादातर - मैं अपवादों में किया था की जरूरत है) काम करता है। –
हेड्स अप, यह अब और सत्य नहीं है। नीचे @ real4x का उत्तर देखें। – eremzeit