2012-01-04 10 views
16

का उपयोग करके हटाएं मैं HTML टेक्स्ट इनपुट पर दायां माउस क्लिक + हटाएं ईवेंट ट्रैक करना चाहता हूं। मैंसही माउस का पता लगाने के लिए कैसे क्लिक करें Jquery/जावास्क्रिप्ट

  $("#evalname").bind('paste/cut/copy', function(e) 
      { 
      do something 

      }); 

यहाँ नीचे के रूप में मानचित्रण राइट माउस क्लिक + पेस्ट/कट/कॉपी में सफल 'evalname' मेरे एचटीएमएल पाठ इनपुट की आईडी है। मैंने

  $("#evalname").bind('delete', function(e) 
      { 
      do something 

      }); 

की तरह कोशिश की लेकिन काम नहीं कर रहा। Jquery/जावास्क्रिप्ट में राइट माउस क्लिक + हटाएं ईवेंट को मैप करने का कोई तरीका है?

+1

अच्छा सवाल :) +1 – abuduba

+1

सुनिश्चित नहीं हैं कि मैं आपके सवाल का understans, आप "हटाएँ" के साथ क्या मतलब है? चयनित पाठ पर संदर्भ मेनू विकल्प बटन? क्या 'परिवर्तन ईवेंट' का उपयोग करने के लिए पर्याप्त नहीं होगा और शून्य/खाली स्ट्रिंग के विरुद्ध मान की तुलना करें? – Stefan

उत्तर

7

जैसा कि पहले ही उत्तर दिया, यह ब्राउज़र पर लेने के लिए वास्तव में इस्तेमाल किया जा रहा, का उपयोग करते हुए .bind('copy', func....) केवल ContextMenu की प्रतिलिपि नहीं सुनेगा हटाना ContextMenu संभव नहीं है, लेकिन यह भी CTRL+c के रूप में यह वास्तव में क्लिपबोर्ड के लिए बाध्य है।

मैं एक साथ एक प्लगइन है, जो ईमानदारी से डाल दिया है एक हैक का एक सा है, लेकिन यह आप को पकड़ने के लिए अनुमति देगा:

  • प्रसंग कॉपी, कट, चिपकाएं, हटाएं - केवल
  • प्रसंग कॉपी, कट, चिपकाएं, हटाएं - और - Ctrl + C, Ctrl + एक्स, Ctrl + V
  • या सिर्फ एक, दो, तीन या चार मद (रों) के ऊपर किसी एक तरीके से ।बेशक एक समस्या आईई थी, यह बदलावों को सुनने के लिए jQuery .bind('input', func.... ट्रिगर नहीं करता है, इसलिए मुझे इसे IE के लिए ट्रिगर करने की आवश्यकता है, इसलिए (मिलीसेकंड) में भिन्न देरी हो सकती है।

    प्लगइन:

    (function($) { 
        $.fn.contextDelete = function(options) { 
         var set = { 
          'obj': $(this), 
          'menu': false, 
          'paste': false, 
          'cut': false, 
          'copy': false, 
          'set': '', 
          'ie': null, 
         }; 
         var opts = $.extend({ 
          'contextDelete': function() {}, 
          'paste': function() {}, 
          'cut': function() {}, 
          'copy': function() {}, 
          'contextOnly': false, 
         }, options); 
    
         $(window).bind({ 
          click: function() { 
           set.menu = false; 
          }, 
          keyup: function() { 
           set.menu = false; 
          } 
         }); 
    
         set.obj.bind({ 
          contextmenu: function() { 
           set.menu = true; 
           set.paste = false; 
           set.cut = false; 
           set.copy = false; 
           set.val = set.obj.val(); 
    
           // Hack for IE: 
           if ($.browser.msie) { 
            set.ie = setInterval(function() { 
             set.obj.trigger($.Event('input')); 
             if (!set.menu) { 
              clearInterval(set.ie); 
             } 
            }, 300); 
           } 
           // End IE Hack 
          }, 
          paste: function(e) { 
           set.paste = true; 
           if (opts.contextOnly) { 
            if (set.menu) { 
             opts.paste(e); 
             set.menu = false; 
            } 
           } 
           else { 
            opts.paste(e); 
           } 
          }, 
          cut: function(e) { 
           set.cut = true; 
           if (opts.contextOnly) { 
            if (set.menu) { 
             opts.cut(e); 
             set.menu = false; 
            } 
           } 
           else { 
            opts.cut(e); 
           } 
          }, 
          copy: function(e) { 
           set.copy = true; 
           if (opts.contextOnly) { 
            if (set.menu) { 
             opts.copy(e); 
             set.menu = false; 
            } 
           } 
           else { 
            opts.copy(e); 
           } 
          }, 
          input: function(e) { 
           if (set.menu && (!set.paste) && (!set.cut) && (!set.copy)) { 
            if (set.obj.val().length < set.val.length) { 
             opts.contextDelete(e); 
             set.menu = false; 
            } 
           } 
          } 
         }); 
        }; 
    })(jQuery); 
    

    एक उदाहरण के उपयोग, ContextMenu हटाना + संदर्भ कॉपी ही:

    $('#evalname').contextDelete({ 
        contextDelete: function(e) { 
         alert('You just deleted something!'); 
        }, 
        copy: function(e) { 
         alert('You just copied something!'); 
        }, 
        contextOnly: true, 
    }); 
    

    Click Here for a DEMO

    +0

    दूसरा उदाहरण Xubuntu पर फ़ायरफ़ॉक्स 25.0.1 के साथ काम नहीं करता है। –

    +0

    क्रोम 42.0.2311 – GrantD71

    +0

    पर संदर्भ मेनू हटाने के लिए भी काम नहीं कर रहा है मैंने अभी विंडोज 7 पर फ़ायरफ़ॉक्स 47 पर परीक्षण किया है और यह मेरे लिए काम करता है। –

    1

    आज तक, मुझे विश्वास नहीं है कि ब्राउज़र ने इसे लागू किया है।

    कॉपी, पेस्ट और कट के लिए ईवेंट को पेस्टबोर्ड से बातचीत करने के लिए कार्यक्षमता के रूप में जोड़ा गया है, और चूंकि डिलीट पेस्टबोर्ड का हिस्सा नहीं है, इसे लागू नहीं किया गया है।

    ब्राउज़र समर्थन तालिका (2011/04) http://codebits.glennjones.net/editing/setclipboarddata.htm

    वेबकिट डॉक्स http://developer.apple.com/library/mac/#documentation/AppleApplications/Conceptual/SafariJSProgTopics/Tasks/CopyAndPaste.html

    फ़ायरफ़ॉक्स डॉक्स https://developer.mozilla.org/en/DOM/element#Event_Handlers

    2

    स्टीफन की टिप्पणी, और UberNeet के जवाब पर विस्तार करने के लिए:

    आप संदर्भ मेनू से "हटाएं" की पसंद का पता नहीं लगा सकते हैं।

    आप इनपुट की सामग्री में परिवर्तन का पता लगा सकते हैं, या तो कुंजीपटल (जो डिलीट कुंजी पकड़ लेंगे) पर या परिवर्तन या धुंध पर (जो पता लगाएगा कि वे फ़ील्ड खाली करते हैं और कहीं और क्लिक करते हैं)।

    यदि आप इस पल को जानना चाहते हैं, भले ही उन्होंने क्षेत्र छोड़ा न हो, तो आप हर आधे सेकेंड में मतदान करने के लिए टाइमर सेट करने का प्रयास कर सकते हैं और जांच सकते हैं कि फ़ील्ड खाली है या नहीं। गरीब उपयोगकर्ता के ब्राउज़र को खत्म करने के डर के लिए बहुत कठोर टाइमर का उपयोग करने से सावधान रहें।

    इनमें से कोई भी आदर्श समाधान नहीं है, लेकिन ब्राउज़र के अंदर काम करने का आनंद है!

    0

    कोशिश 'evalname' का मान की जाँच करने के विशेष समय अंतराल के बाद क्षेत्र। इस का उपयोग करते हुए हम कर सकते हैं/कट/कॉपी/पेस्ट का पता लगाने के संदर्भ मेनू के हटाने में सक्षम

    var evalnameLength=$("#evalname").val().length; 
        var enableSave; 
         enableSave=setInterval(function(){ 
          if(evalnameLength!=$("#evalname").val().length){ 
           do something; 
           clearInterval(enableSave); 
          } 
         },500); 
    
    संबंधित मुद्दे