2010-04-29 10 views
8

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

$([whatever]).bind("click", function(e) { e.preventDefault(); }); 

और वास्तव में, मैं इस पर क्या कर सकते हैं हर तत्व के बारे में - किसी को पता क्यों या कर सकते थे मुझे कुछ दस्तावेज की ओर इशारा करते हैं?

यहां प्रासंगिक कोड है जिसके साथ मैं काम कर रहा हूं, धन्यवाद दोस्तों।

HTML:

<script type="text/javascript"> 
var r = new RightClickTool(); 
</script> 

<div id="main"> 
    <input type="text" class="listen rightClick" value="0" /> 
</div> 

जे एस:

function RightClickTool(){ 

var _this = this; 
var _items = ".rightClick"; 

$(document).ready(function() { _this.init(); }); 

this.init = function() { 
_this.setListeners(); 
} 

this.setListeners = function() { 
$(_items).click(function(e) { 
    var webKit = !$.browser.msie && e.button == 0; 
    var ie = $.browser.msie && e.button == 1; 

    if(webKit||ie) 
    { 

    // Left mouse...do something() 

    } else if(e.button == 2) { 
    e.preventDefault(); 

    // Right mouse...do something else(); 
    } 

}); 
} 

} // Ends Class 

संपादित करें:

क्षमा करें, टिप्पणी मुझे लगता है कि मैं कुछ चीजों को स्पष्ट करना चाहिए पढ़ने के बाद।

1) उपरोक्त कोड काम करता है ... एक अर्थ में। कोड किस बटन पर क्लिक किया गया था, इस प्रकार सॉर्ट करने में सक्षम है, यह सिर्फ परवाह नहीं करता है कि मैं e.preventDefault() कहता हूं और राइट-क्लिक मेनू अभी भी पॉप अप करता है। दूसरे शब्दों में, यदि आप ई। बटन पर अलर्ट डालते हैं तो आपको बाएं और 2 के लिए अपना 1 या 0 प्राप्त होगा ... लेकिन यह सिर्फ मुझ पर हंसता है और अभी भी शापित डिफ़ॉल्ट मेनू दिखाता है!

2) अगर मैं किसी अन्य तत्व (इनपुट के अलावा) पर jQuery चयनकर्ता डालता हूं तो सब कुछ काम करेगा, एफएफ रोकथाम डीफॉल्ट() कॉल का सम्मान करेगा और डिफ़ॉल्ट राइट-क्लिक मेनू नहीं दिखाया जाएगा।

+0

सिर्फ 'झूठी वापसी' के बारे में क्या? –

+0

इसके अलावा, 'e.button' के बजाय 'e.which' आज़माएं। – karim79

+0

संबंधित हो सकता है http://stackoverflow.com/questions/1489817/jquery-liveclick-firing-for-right-click – scott

उत्तर

3

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

document.getElementById('myElement').oncontextmenu=function(){ 

    // Code to handle event 
    return false; 
} 

आप अलग अलग परिणाम प्राप्त कर सकेंगे:

window.oncontextmenu = function() { return false }; 

केवल एक दिया तत्व उपयोग अंदर ContextMenu घटना पर कब्जा करने के लिए:

var _class = "input.hideRightClick"; 

this.setListeners = function() { 
    $(window).click(function(e) { 
     if($(e.target).is(_class)) 
     { 
      e.preventDefault(); 
      alert("hide!"); 
     } 
    }); 
} 
0

मैंने अभी फ़ायरफ़ॉक्स 3.6 में परीक्षण किया है और यह पहले कथन में आगे बढ़ रहा है, इसलिए e.preventDefault() को कभी नहीं कहा जाता है।

var webKit = !$.browser.msie && e.button == 0; // TRUE IN FIREFOX 3.6 

    var ie = $.browser.msie && e.button == 1; 

    if(webKit||ie) 
    { 

    // Left mouse...do something() 

    } else if(e.button == 2) { 
    e.preventDefault(); 

    // Right mouse...do something else(); 
    } 
+0

रुको, जब आप दाएं माउस पर क्लिक करते हैं तो यह सच साबित होता है? ए) यह नहीं होना चाहिए। बी) यह मेरी मशीन (एफएफ 3.5.7) – Jason

+0

पर भी नहीं है, भले ही मैं e.preventDefault() को पहले/बाहर/if-else (अगर इसका मतलब है कि इसे रेगर्डलेस को आग लगाना चाहिए), एफएफ प्रतीत नहीं होता है देखभाल करने के लिए। – Jason

11

एक पार ब्राउज़र समाधान डिफ़ॉल्ट संदर्भ मेनू को निष्क्रिय करने के यदि आप राइट-क्लिक ईवेंट को बाधित करने के लिए oncontextmenu के अलावा अन्य तरीकों का प्रयास करते हैं तो सटीक ईवेंट परिदृश्य और ब्राउज़र के आधार पर।

jQuery में:

$('myElement').bind('contextmenu', function(){ 

    // Handle right-click event. 
    return false; 
}); 

तुम भी jQuery के घटना का उपयोग कर सकते हैं।जो निर्धारित करने के लिए जो बटन दबाया गया था, लेकिन आप अभी भी डिफ़ॉल्ट ContextMenu घटना को रद्द करना होगा:

// Cancel default oncontextmenu event. 
    $(element).bind('contextmenu', function(){ return false }); 

    $(element).mousedown(function(event){ 

     switch (event.which) 

      case 1: 
      // Left mouse 
      break; 

      case 2: 
      // Middle mouse 
      break; 

      case 3: 
      // Right mouse. 
      break; 

    }); 

मैं IE6 (शराब से कम), क्रोम 11, Firefox 3.6, ओपेरा 11 और सफारी में यह परीक्षण किया है।

+0

इस वेन के लिए धन्यवाद, अच्छी चीजें! –

+0

कोई कारण क्यों 'if (event.which == 3) {// something}' contextmenu को अक्षम करता है अक्षम? – Andreas

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