2009-08-06 18 views
7

मुझे जावास्क्रिप्ट के माध्यम से ब्राउज़र (आईई, फ़ायरफ़ॉक्स, सफारी, आदि) संदर्भ-मेनू खोलने की आवश्यकता है। जिस समस्या को मैं हल करने की कोशिश कर रहा हूं, वह तब होता है जब एक ओवरलैड तत्व राइट-क्लिक किया जाता है, इसके नीचे का तत्व इसके संदर्भ मेनू को दिखाता है। इसलिए यदि शीर्ष तत्व एक लेबल है, जब आप राइट क्लिक करते हैं, तो मुझे नीचे इनपुट तत्व के लिए संदर्भ मेनू दिखाना होगा।मैं तत्व पर ब्राउज़र संदर्भ मेनू कैसे ट्रिगर करूं? (जैसे कि उपयोगकर्ता राइट-क्लिक किया गया)

मुझे पता है कि लेबल के संदर्भ मेनू को दिखाने से कैसे रोकें, लेकिन मुझे नहीं पता कि एक संदर्भ मेनू को मनमाने ढंग से कैसे खोलें।

किसी भी मदद की सराहना की जाती है!

+0

अगर मैं आपकी जगह पर था, तो मैं इसे इस तरह से हैक करने की कोशिश नहीं करता। मैं शायद समझना चाहता हूं कि इनपुट बॉक्स का संदर्भ-मेनू लेबल के बजाय क्यों दिख रहा है। क्या आप अधिक जानकारी प्रदान कर सकते हैं? –

+0

क्षमा करें, प्रश्न पढ़ने के बाद इसे हटा दिया गया। –

+0

आप यहां मेरी प्लगइन देख सकते हैं: http: // fuelyourcoding।कॉम/स्क्रिप्ट/इन्फिल्ड/और टेक्स्ट फ़ील्ड की "सामग्री" पर राइट क्लिक करने का प्रयास करें। यदि मैं ब्राउज़र संदर्भ मेनू को ट्रिगर नहीं कर सकता, तो यह इस प्लगइन का उपयोग कुछ हद तक सीमित करता है। –

उत्तर

13

दुर्भाग्यपूर्ण खबरों के वाहक होने के लिए खेद है, लेकिन जावास्क्रिप्ट के साथ ऐसा करना असंभव है।

+0

मैं उम्मीद कर रहा था कि यह जवाब नहीं था। थोड़ी देर के लिए इसे खोलने के लिए जा रहे हैं .... बस मामले में। :) –

+0

हां, अगर मैं आप थे तो मैं इसे खोल दूंगा। –

2

मैं तुम्हें निराश नहीं करना चाहते हैं, काफी विपरीत, विशेष रूप से, क्योंकि आप अपने खुद के सवाल :)

जवाब मुझे नहीं लगता कि यह है कि एक ब्राउज़र की contect मेनू एक वेब पेज पर एक साधारण स्क्रिप्ट के माध्यम से पहुँचा जा सकता है ।

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

आप माउस ईवेंट कैप्चर क्यों नहीं करते हैं, और जब भी माउस नीचे दिए गए तत्व के क्षेत्र में सीधे होता है, तो आप संदर्भ मेनू को दिखाना चाहते हैं, नीचे दिए गए कवर तत्व को दबाएं, अन्यथा शीर्ष पर वापस जाएं?

यह एक संभावना है जो मैं सोच सकता हूं, मूल रूप से माउस स्थिति के आधार पर छिपा तत्व प्रकट/खुलासा कर सकता हूं। ओवरले में एक छेद काटने की तरह।

या आप टेक्स्ट फ़ील्ड को पारदर्शी क्यों नहीं बनाते और टेक्स्ट फ़ील्ड के नीचे ओवरले को पूरी तरह से क्यों नहीं रखते?

यदि यह तकनीकी रूप से काम नहीं करता है, तो कम से कम आपके पास लक्षित ब्राउज़र के विरुद्ध बग या संवर्द्धन दर्ज करने में एक बिंदु है।

बीटीडब्ल्यू ऐसा लगता है कि संदर्भ मेनू वास्तव में काम करता है अगर उपयोगकर्ता सीधे कैरेट की स्थिति पर सीधे क्लिक करता है, तो यह आपके लिए विचार करने के लिए एक और छेड़छाड़ हो सकता है।

+0

सभी बहुत अच्छे विचार। मुझे लगता है कि नई रिलीज पर मैं लेबल * नीचे * इनपुट तत्व दिखाने के लिए समर्थन जोड़ने जा रहा हूं क्योंकि इससे समस्या हल हो जाएगी। इसका मतलब है कि रैपिंग तत्व इनपुट तत्व या टेक्स्टरेरा के लिए पृष्ठभूमि रंग प्रदान करने की आवश्यकता है। हालांकि काम करना चाहिए! –

0

मेरे पास एक संभावित समाधान है जो आपकी आवश्यकताओं के अनुरूप हो सकता है। यह अभी तक सही नहीं है, मैंने कुछ ब्राउज़रों (फॉक्स 3.6, आई 7, आईई 8, क्रोम 4, सफारी 3 एक्सपी पर केवल कुछ त्वरित परीक्षण किए हैं) इसे ट्वीड और सुधार करने की आवश्यकता होगी, लेकिन इसकी शुरुआत होगी। मूल रूप से विचार है कि राइट-क्लिक mousedown पर लेबल को निकालना है ताकि इच्छित फ़ील्ड माउसअप ईवेंट द्वारा मारा जा सके और इसलिए प्रासंगिक फ़ील्ड पर संदर्भ मेनू को सक्रिय कर दें।

// Remove the contextmenu from "In-Field" Labels 
base.$label.bind("contextmenu",function(e){ 
    return false; 
}); 

// Detect right click on "In-Field" label: 
// hide label on mousedown so mouseup will target the field underneath. 
base.$label.mousedown(function(e){   
    if (e.which == 3){ 
     var elLbl = $(this); 
     elLbl.hide(); 
     var elFid = $(this).attr("for"); 
     // bind blur event to replace the label when we are done. 
     $("#" + elFid).bind("blur.infieldlabel",function(){      
      elLbl.show(); 
      $("#" + elFid).unbind("blur.infieldlabel");      
     });    
     return false; 
    } 
}); 

आईई और Safari ब्राउज़र एक अजीब मुद्दा जहां से पहले लेबल फिर से (कुछ घटना समय मुझे लगता है कि के साथ क्या करना) को प्रदर्शित करेगा अंदर और बाहर दो बार क्लिक करने की जरूरत अनुभव करते हैं। आप आसानी से देख सकते हैं कि कोड को देखकर यह क्यों हो रहा है। कभी-कभी क्षेत्र में चिपकने के बाद लोमड़ी में थोड़ी सी गड़बड़ी देखी गई, धुंध पर लेबल एक अलग दूसरे के लिए दिखाई दिया जब यह नहीं होना चाहिए। यदि आप इस विधि को अपने कोड में शामिल करने का निर्णय लेते हैं तो यह सुधारने के लिए एक काफी सरल बात होनी चाहिए।

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

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