ডাবল ক্লিকের পরে পাঠ্য নির্বাচন আটকাবেন


294

আমি আমার ওয়েব অ্যাপ্লিকেশনটিতে স্প্যানের উপর ডাব্লিক্লিক ইভেন্টটি পরিচালনা করছি। একটি পার্শ্ব-প্রতিক্রিয়া হ'ল ডাবল ক্লিক পৃষ্ঠায় পাঠ্য নির্বাচন করে। আমি কীভাবে এই নির্বাচনটি হতে বাধা দিতে পারি?

উত্তর:


351
function clearSelection() {
    if(document.selection && document.selection.empty) {
        document.selection.empty();
    } else if(window.getSelection) {
        var sel = window.getSelection();
        sel.removeAllRanges();
    }
}

আপনি নন-আইই ব্রাউজার এবং আই 10 এর জন্য স্প্যানগুলিতে এই স্টাইলগুলি প্রয়োগ করতে পারেন:

span.no_selection {
    user-select: none; /* standard syntax */
    -webkit-user-select: none; /* webkit (safari, chrome) browsers */
    -moz-user-select: none; /* mozilla browsers */
    -khtml-user-select: none; /* webkit (konqueror) browsers */
    -ms-user-select: none; /* IE10+ */
}

44
সত্যের পরে নির্বাচন অপসারণের বিপরীতে আসলেই বাধা দেওয়ার কোনও উপায় আছে কি? এছাড়াও, আপনার দ্বিতীয়টি যদি বিবৃতিটি আরও ভাল পাঠযোগ্যতার জন্য থাকে তবে অন্যটির ভিতরে থাকতে পারে।
ডেভিড

8
-মজ- (এবং -খ.টি.টি.এম.এল - আপনার যদি বৃহত কনকরার শ্রোতা থাকে) ছাড়াও ওয়েবেকিট-উপসর্গটি (ওয়েবকিট ভিত্তিক ব্রাউজারগুলির জন্য এটি পছন্দসই উপসর্গ) Best
চোখের পলকহীনতা

3
এই যেমন IE10 মধ্যে এখন পাওয়া যায় -ms-user-select: none;দেখুন blogs.msdn.com/b/ie/archive/2012/01/11/... @PaoloBergantino
লেবু

1
@ টিমহার্পার: একটি লাইব্রেরি ব্যবহার করে জাভাস্ক্রিপ্ট সমাধান যতটা সম্ভব, নিশ্চিত। সত্যিই নিশ্চিত নয় যে কেন এটি একটি নিম্নগামীকে সতর্ক করে।
পাওলো বার্গান্টিনো

14
ডাবল ক্লিকে নির্বাচন নিষ্ক্রিয় করা এবং এটি সম্পূর্ণরূপে অক্ষম করার মধ্যে পার্থক্য রয়েছে। প্রথমটি ব্যবহারযোগ্যতা বৃদ্ধি করে। দ্বিতীয়টি হ্রাস পায়।
রোবো রোবোক

112

সরল জাভাস্ক্রিপ্টে:

element.addEventListener('mousedown', function(e){ e.preventDefault(); }, false);

বা jQuery সহ:

jQuery(element).mousedown(function(e){ e.preventDefault(); });

26
হ্যাঁ, আমি যে সমস্যাটি করছিলাম সে একই সমস্যাটি সমাধান করার জন্য আমি এটি ব্যবহার করেছি (+1), এমনটি return falseব্যবহার event.preventDefault()না করে যা আপনার মোউসডাউনে থাকা অন্য কোনও হ্যান্ডলারকে হত্যা না করে।
সাইমন পূর্ব

2
এটি পৃষ্ঠায়
পাঠ্য

1
@ জোহানকতেজিক কেবলমাত্র যদি পাঠ্য হয় তবে elementহ্যাঁ।
ফ্রেগান্ট

11
এই ইভেন্ট হ্যান্ডলারটি "dblclick" এ নিয়োগের প্রত্যাশা করবে - তবে এটি কার্যকর হয় না, যা এত অদ্ভুত। "মোডাউনডাউন" দিয়ে আপনি অবশ্যই টেনে এনে পাঠ্য নির্বাচন করা থেকে বিরত রয়েছেন।
corwin.amber

74

কেবলমাত্র একটি ডাবল ক্লিকের পরে পাঠ্য নির্বাচন প্রতিরোধ করতে:

আপনি MouseEvent#detailসম্পত্তি ব্যবহার করতে পারে । মোডাউনডাউন বা মাউসআপ ইভেন্টগুলির জন্য এটি বর্তমান ক্লিক গণনা 1 টি plus

document.addEventListener('mousedown', function (event) {
  if (event.detail > 1) {
    event.preventDefault();
    // of course, you still do not know what you prevent here...
    // You could also check event.ctrlKey/event.shiftKey/event.altKey
    // to not prevent something useful.
  }
}, false);

Https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail দেখুন


4
এটা সত্যিই দারুন! ফায়ারফক্স 53 এ কাজ করে
জারোথ

6
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
এখানের সমস্ত কিছুই ওপির

1
Chrome এও কাজ করে
KS74

1
IE 11 উইন্ডোজ 10 =) এও কাজ করে। এটি ভাগ করে নেওয়ার জন্য ধন্যবাদ।
ফার্নান্দো ভিয়েরা

(event.detail === 2)কেবলমাত্র ডাবল-ক্লিক (এবং ট্রিপল-ক্লিক ইত্যাদি নয়) রোধ করতে ব্যবহার করুন
রবিন স্টুয়ার্ট

32

এফডাব্লুআইডাব্লু, আমি সেই শিশু উপাদানগুলির পিতামাতার উপাদানকে সেট করেছি user-select: noneযা পিতামাতার উপাদানটিতে কোথাও ডাবল ক্লিক করার সময় আমি কোনওভাবেই নির্বাচন করতে চাই না। এবং এটি কাজ করে! দুর্দান্ত জিনিস হ'ল contenteditable="true", পাঠ্য নির্বাচন ইত্যাদি এখনও শিশু উপাদানগুলিতে কাজ করে!

তাই মত:

<div style="user-select: none">
  <p>haha</p>
  <p>haha</p>
  <p>haha</p>
  <p>haha</p>
</div>

ধন্যবাদ, style="user-select: note"সর্বত্র
গোলমরিচ ইস্যুটি

মূলত আপনি কখনই পাঠ্যটি নির্বাচনযোগ্য হতে চান না এমন ক্ষেত্রে কেবল সিএসএস-এর সমাধান। ধন্যবাদ!
ইয়ান লাভজয়

11

একটি সরল জাভাস্ক্রিপ্ট ফাংশন যা কোনও পৃষ্ঠা-উপাদানটির ভিতরে থাকা সামগ্রীকে অনির্বাণিত করে তোলে:

function makeUnselectable(elem) {
  if (typeof(elem) == 'string')
    elem = document.getElementById(elem);
  if (elem) {
    elem.onselectstart = function() { return false; };
    elem.style.MozUserSelect = "none";
    elem.style.KhtmlUserSelect = "none";
    elem.unselectable = "on";
  }
}

4

কৌণিক 2+ এর সমাধান খুঁজছেন তাদের জন্য ।

আপনি mousedownটেবিল সেলের আউটপুট ব্যবহার করতে পারেন ।

<td *ngFor="..."
    (mousedown)="onMouseDown($event)"
    (dblclick) ="onDblClick($event)">
  ...
</td>

এবং যদি প্রতিরোধ detail > 1

public onMouseDown(mouseEvent: MouseEvent) {
  // prevent text selection for dbl clicks.
  if (mouseEvent.detail > 1) mouseEvent.preventDefault();
}

public onDblClick(mouseEvent: MouseEvent) {
 // todo: do what you really want to do ...
}

dblclickআশানুরূপ আউটপুট কাজ চলতে থাকে।


3

বা, মজিলায়:

document.body.onselectstart = function() { return false; } // Or any html object

আইই তে,

document.body.onmousedown = function() { return false; } // valid for any html object as well

5
এই একাকীকরণ পাঠ্য নির্বাচন করার অনুমতি দেয় না।
jmav

1
@ jmav আপনাকে ফাংশন ওভাররাইডগুলি এর চেয়ে বেশি নির্দিষ্ট উপাদানের উপর প্রয়োগ করতে হবে document.body
সাইফার

2

পুরানো থ্রেড, তবে আমি এমন একটি সমাধান নিয়ে এসেছি যা আমি বিশ্বাস করি যে এটি পরিষ্কার since এটি সোজা, এবং আমার জন্য ভাল কাজ করে। এখানে একটি উদাহরণ; আমি যখন "তীর-ডান" শ্রেণীর সাহায্যে অবজেক্টটিতে বেশ কয়েকবার ক্লিক করি তখন আমি পাঠ্য-নির্বাচন বাধা দিতে চাই:

$(".arrow-right").hover(function(){$('body').css({userSelect: "none"});}, function(){$('body').css({userSelect: "auto"});});

এইচটিএইচ!


1

আপনি যদি কেবল কোনও ডাবল ক্লিকের পাশাপাশি কোনও পদ্ধতি দ্বারা পাঠ্য নির্বাচনকে পুরোপুরি আটকাতে চাইছেন তবে আপনি user-select: noneCSS বৈশিষ্ট্যটি ব্যবহার করতে পারেন । আমি ক্রোম 68 পরীক্ষা করে দেখেছি, তবে https://caniuse.com/#search=user-select অনুযায়ী এটি অন্যান্য বর্তমানের সাধারণ ব্যবহারকারী ব্রাউজারগুলিতে কাজ করা উচিত।

আচরণগতভাবে, ক্রোম 68৮ এ এটি শিশু উপাদানগুলির দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত, এবং উপাদানটির আশেপাশে এবং উপাদান সহ পাঠ্য নির্বাচন করা হলেও এমন কোনও উপাদান থাকা পাঠ্য নির্বাচন করার অনুমতি দেয় না।


0

IE 8 সিটিআরএল এবং শিফট প্রতিরোধের জন্য পৃথক উপাদানগুলিতে পাঠ্য নির্বাচন ক্লিক করুন

var obj = document.createElement("DIV");
obj.onselectstart = function(){
  return false;
}

নথিতে পাঠ্য নির্বাচন প্রতিরোধ করার জন্য

window.onload = function(){
  document.onselectstart = function(){
    return false;
  }
}

-2

আমারও একই সমস্যা ছিল। আমি এটিকে স্যুইচ করে <a>যোগ করে সমাধান করেছি onclick="return false;"(যাতে এটিতে ক্লিক করা ব্রাউজারের ইতিহাসে নতুন এন্ট্রি যুক্ত না করে)।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.