2012-06-28 12 views
17

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

screenshot

मैं कोई लाभ नहीं हुआ -webkit-touch-callout की कोशिश की है, और यहां तक ​​कोई लाभ नहीं हुआ $('body').on('select',function(e){e.preventDefault();return;}); तरह बातें करने की कोशिश की: मैं उन (छवि देखें) को निष्क्रिय करने की जरूरत है। और सस्ता चाल ::selection:rgba(0,0,0,0); या तो काम नहीं करेगी, क्योंकि इन्हें छिपाने में मदद नहीं होगी - चयन अभी भी होता है और यह यूआई को बाधित करता है। इसके अलावा मैं अनुमान लगा रहा हूं कि उन झंडे अभी भी वहां होंगे।

कोई भी विचार बहुत अच्छा होगा। धन्यवाद!

+0

हम्म। जब मैंने अभी अपने फोन पर इसका परीक्षण किया तो फिडल काम करना प्रतीत होता था, लेकिन मुझे 100% यकीन नहीं है कि यह मेरे लिए उत्पादन में काम करेगा - मुझे अभी भी घटनाओं को ट्रिगर करने में सक्षम होना चाहिए (विशेष रूप से, 'टचस्टार्ट', 'टचमॉव', और तत्वों पर 'touchend')। हालांकि, इस पर विचार केवल 'चयन शुरू करें' पर कार्य कर रहा है, हम शायद अच्छे हो सकते हैं। मैं आज रात का परीक्षण करूँगा और आपको वापस ले जाऊंगा :) –

उत्तर

14

संदर्भ:

jsFiddle Demo with Plugin

jsFiddle डेमो ऊपर मैंने एक प्लगइन का उपयोग करता है चयनित होने एंड्रॉयड में या आईओएस से पाठ के किसी भी ब्लॉक को रोकने की अनुमति देना डिवाइस (डेस्कटॉप ब्राउज़र के साथ भी)।

इसका उपयोग करना आसान है और jQuery प्लगइन स्थापित होने के बाद यहां नमूना मार्कअप है।

नमूना HTML:

<p class="notSelectable">This text is not selectable</p> 

<p> This text is selectable</p> 

नमूना jQuery:

$(document).ready(function(){ 

    $('.notSelectable').disableSelection(); 

}); 

प्लगइन कोड:

$.fn.extend({ 
    disableSelection: function() { 
     this.each(function() { 
      this.onselectstart = function() { 
       return false; 
      }; 
      this.unselectable = "on"; 
      $(this).css('-moz-user-select', 'none'); 
      $(this).css('-webkit-user-select', 'none'); 
     }); 
     return this; 
    } 
}); 

प्रति अपना संदेश टिप्पणी:I still need to be able to trigger events (notably, touchstart, touchmove, and touchend) on the elements.

मैं बस एक आवरण कि है नहीं इस प्लगइन से प्रभावित प्रयोग करेंगे होगा, फिर भी यह पाठ सामग्री इस प्लगइन का उपयोग कर संरक्षित कर रहे हैं।

पाठ का कोई खंड में एक लिंक के साथ बातचीत, आप लेकिन लिंक सभी के लिए span tags का उपयोग करें और केवल उन्हीं span tags के लिए वर्ग के नाम .notSelected जोड़ने के लिए, इस प्रकार के चयन और एंकर लिंक की बातचीत संरक्षण सेट कर सकते हैं।

स्थिति अपडेट: इस अद्यतन jsFiddle की पुष्टि करता है कि आप चिंता का विषय है जब पाठ चयन अक्षम किया गया है कि शायद अन्य कार्यों काम न करें। इस अद्यतन जेएसफ़ाइल में दिखाया गया है jQuery क्लिक इवेंट श्रोता जो बोल्ड टेक्स्ट पर क्लिक होने पर ब्राउज़र अलर्ट को आग लगाएगा, भले ही वह बोल्ड टेक्स्ट टेक्स्ट-चयन योग्य न हो।

+0

यह मेरे एंड्रॉइड 2.3.3 के लिए काम नहीं करता है, बस आपके जेएसफ़िल्ड पर गया और इसे आजमाया। सभी पाठों को चुना गया। कोई विचार? – Oneezy

+0

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

+0

+1 शानदार, धन्यवाद @arttronics! संदर्भ मेनू को "लंबे स्पर्श" पर दिखाने से क्या भिन्नता हो सकती है? –

27
-webkit-touch-callout:none; 
-webkit-user-select:none; 
-khtml-user-select:none; 
-moz-user-select:none; 
-ms-user-select:none; 
user-select:none; 
-webkit-tap-highlight-color:rgba(0,0,0,0); 

यह हर ब्राउज़र के लिए इसे अक्षम कर देगा।

+0

मतलब नहीं होना चाहिए, लेकिन क्या आपने सवाल बिल्कुल पढ़ा ?? मैंने बिल्कुल अपने सीएसएस (अलग-अलग आईडी/कक्षाओं से शरीर तक और * * ') तक पूरी तरह से plastered है, और मैंने स्पष्ट रूप से कहा कि हाइलाइटिंग छुपा एक बुरा विचार है .... –

+2

हाँ, मैंने आपका पढ़ा पद। अब, क्या आप वास्तव में कोड का प्रयास करते थे? इसमें -webkit-touch-callout जोड़ा गया है और हाइबिट-टैप-हाइलाइट-रंग का उपयोग करके हाइलाइट ओवरले को रोकने का सही तरीका है। मैं इसे अपने वेबपैस में उपयोग करता हूं और यह ठीक काम करता है - कोई सामग्री मेनू नहीं, कोई हाइलाइटिंग नहीं और कोई चयन नहीं। – CoreyRS

+1

मुझे लगता है कि मैंने मूल रूप से उल्लेख नहीं किया है, लेकिन मेरे पास '-webkit-touch-callout: none;' पूरे समय भी है। एकमात्र चीज '-वेबिट-टैप-हाइलाइट-कलर' होगा, हाइलाइट पारदर्शी बना देगा, __not__ इसे निष्क्रिय करें। मैंने शुरुआत में कोड से परेशान नहीं किया क्योंकि ऐसा कुछ भी नहीं था जिसे मैंने पहले नहीं देखा था, लेकिन सिर्फ आपको प्रसन्न करने के लिए मैंने कोशिश की और यह काम नहीं किया। आपने किस ओएसई/डिवाइस का परीक्षण किया है जिस पर यह काम करता है? एंड्रॉइड 2.3 या 3.0 पर काम नहीं कर रहा है ... –

1

-webkit-user-select: none; 4.1 (क्षमा करें) तक एंड्रॉइड पर समर्थित नहीं था।

+2

पर तो इसे छुटकारा पाने/रोकने के लिए कोई रास्ता नहीं है ?! :( –

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