คุณทำให้ Anchor link ไม่สามารถคลิกหรือปิดใช้งานได้อย่างไร?


92

ฉันมีสมอลิงค์ที่ฉันต้องการปิดการใช้งานเมื่อผู้ใช้คลิกที่มัน หรือลบแท็กจุดยึดออกจากรอบ ๆ ข้อความ แต่ให้เก็บข้อความไว้อย่างแน่นอน

<a href='' id='ThisLink'>some text</a>

ฉันสามารถทำได้อย่างง่ายดายด้วยปุ่มโดยการเพิ่ม.attr("disabled", "disabled");
ฉันเพิ่มคุณสมบัติปิดใช้งานสำเร็จแล้ว แต่ลิงก์ยังคงคลิกได้
ฉันไม่สนใจจริงๆว่าข้อความจะถูกขีดเส้นใต้หรือไม่

เบาะแสใด ๆ ?

เมื่อคุณคลิกที่นักดนตรีที่ไม่ถูกต้องควรเพิ่มคำว่า "ผิด" จากนั้นจึงไม่สามารถคลิกได้
เมื่อคุณคลิกและคุณถูกต้องควรเพิ่ม "Awesome" จากนั้นปิดใช้งาน<a>แท็กทั้งหมด


ลบส่วน href และเพิ่มลงใน CSS ของคุณ: "cursor: pointer" ฉันถือว่าคุณมี $ ('# ThisLink') คลิกหรืออะไรทำนองนั้น?
Book Of Zeus

1
$ ("# ThisLink"). parent (). find ("a"). remove ();
Adam Holmes

Adam วิธีแก้ปัญหานี้เกือบจะได้ผล มันจะกำจัดข้อความทั้งหมดภายในแท็ก
Evik James

คำตอบ:


12

ฉันเพิ่งรู้ว่าคุณกำลังขออะไร (ฉันหวังว่า) นี่เป็นวิธีแก้ปัญหาที่น่าเกลียด

var preventClick = false;

$('#ThisLink').click(function(e) {
    $(this)
       .css('cursor', 'default')
       .css('text-decoration', 'none')

    if (!preventClick) {
        $(this).html($(this).html() + ' lalala');
    }

    preventClick = true;

    return false;
});

สิ่งนี้สามารถแก้ปัญหาได้จริง ๆ ประเภทของ ... แทนที่จะเป็น. คลิกให้ใช้. บนร่างกายและมอบหมายให้ 'a [disabled]' จากนั้นใส่รหัส css ใน css จริงโดยใช้ตัวเลือกเดียวกัน จากนั้นการป้องกันการคลิกทำได้ง่ายเพียงแค่ event.preventDefault () และส่งคืนเท็จ
lassombra

2
ไม่เห็นด้วยใช้ CSS "pointer-events: none;" แทนเช่นเดียวกับใน Unswers อื่น ๆ
vitrilo

200

วิธีที่สะอาดที่สุดคือการเพิ่มคลาสที่มีตัวชี้เหตุการณ์: ไม่มีเมื่อคุณต้องการปิดใช้งานการคลิก มันจะทำงานเหมือนป้ายกำกับปกติ

.disableClick{
    pointer-events: none;
}

19
การใช้แนวคิดนี้วิธีที่ง่ายกว่านั้นคือการใช้ [ปิดการใช้งาน] เป็นตัวเลือกสำหรับ css ดังนั้นคุณไม่จำเป็นต้องเพิ่มคลาส. disableClick ลงในจุดยึด
Ferran Salguero

15
โปรดใช้ความระมัดระวังในขณะที่คุณยังสามารถแท็บสิ่งที่ปิดใช้งานด้วยตัวชี้เหตุการณ์: ไม่มี
Mike Mellor

วิธีนี้ดีสำหรับฉันในเบราว์เซอร์สมัยใหม่ ฉันมีแท็กจุดยึดที่ใช้งานได้ซึ่งเชื่อมโยงกับเหตุการณ์การคลิกและเพื่อไม่ให้มีการส่งสแปมเนื่องจากกระบวนการของพวกเขาทำสิ่งที่พวกเขาทำฉันเพิ่มสิ่งนี้โดยทางโปรแกรมแล้วลบออกเมื่อกระบวนการเสร็จสิ้น การแท็บไปที่แท็กจุดยึดที่ปิดใช้งานในกรณีของฉันก็ไม่น่ากังวลเช่นกัน แต่อาจเป็นสำหรับคนอื่น ๆ YMMV
Stephen Tetreault

2
การใช้pointer-events:noneจะปิดใช้งานcursorข้อความชื่อเรื่องและเหตุการณ์การวางเมาส์เหนืออื่น ๆ
Keith

ค่า none สั่งให้เหตุการณ์ของเมาส์ไปที่ "ผ่าน" องค์ประกอบและกำหนดเป้าหมายสิ่งที่อยู่ "ข้างใต้" องค์ประกอบนั้นแทน developer.mozilla.org/en-US/docs/Web/CSS/pointer-events นั่นอาจเป็นปัญหาในบางรูปแบบ
user2988142

33
<a href='javascript:void(0);'>some text</a>

8
โปรดอธิบายวิธีแก้ปัญหาของคุณเพื่อให้ผู้เยี่ยมชมคำถามนี้ในอนาคตเข้าใจว่าจะแก้ปัญหาได้อย่างไร
War10ck

3
จาก: MDN: The void Operator . เมื่อเบราว์เซอร์ดังต่อไปนี้javascript: URIก็จะประเมินรหัสใน URI undefinedแล้วแทนที่เนื้อหาของหน้าเว็บที่มีค่าที่ส่งกลับเว้นแต่ค่าส่งกลับเป็น ตัวvoidดำเนินการสามารถใช้คืนundefinedได้ ตัวอย่างเช่น <a href="javascript:void(0);"> Click here to do nothing </a> โปรดทราบว่าjavascript:โปรโตคอลหลอกไม่ได้รับการสนับสนุนมากกว่าทางเลือกอื่น ๆ เช่นตัวจัดการเหตุการณ์ที่ไม่สร้างความรำคาญ
เลนิน

29

ใช้สไตล์ CSS ของตัวชี้เหตุการณ์ (ตามที่ Jason MacDonald แนะนำ)

ดู MDN https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events รองรับในเบราว์เซอร์ส่วนใหญ่

การเพิ่มแอตทริบิวต์ "ปิดการใช้งาน" แบบง่ายไปยังจุดยึดจะทำงานได้หากคุณมีกฎ CSS ส่วนกลางดังต่อไปนี้:

a[disabled], a[disabled]:hover {
   pointer-events: none;
   color: #e1e1e1;
}

3
+1 สำหรับการเพิ่มสไตล์ผ่านแอตทริบิวต์ [disabled] แทนที่จะเป็นคลาส ควรสังเกตว่าตัวชี้เหตุการณ์: ไม่มี; ไม่ทำงานในสิ่งที่เก่ากว่า IE11 แม้ว่า
Daniel Tonon

IE ทั้งหมดมีตรรกะที่เป็นกรรมสิทธิ์ของตัวเองในการปิดใช้งานจุดยึดปุ่มและแม้แต่องค์ประกอบอื่น ๆ ตามค่าเริ่มต้นวิธีแก้ปัญหานี้จำเป็นสำหรับเบราว์เซอร์ที่ไม่ใช่ IE
vitrilo

3
+1. เพียงเพื่อให้ผมไม่ต้องมองมันได้ในครั้งต่อไปอีกครั้ง: จาวาสคริปต์ที่ต้องการ (ใช้ jQuery) $("#elementid").attr("disabled", "disabled");จะเป็น นอกจากนี้ยังอาจเป็นประโยชน์ในการรวมcursor: defaultไว้ใน CSS (ตามคำแนะนำของ Muhammad Nasir)
ASL

องค์ประกอบไม่มีแอตทริบิวต์ที่ปิดใช้งานการใช้เป็นตัวเลือกอาจใช้งานได้หรือไม่ได้
RobG

1
ใช้งานง่าย - ทางออกที่ดี ฉันรู้สึกประหลาดใจจริงๆที่พบว่า<a />องค์ประกอบไม่มีแอตทริบิวต์ที่ปิดใช้งาน - ดูเหมือนจะแปลก
Morvael


10

Bootstrap ให้เรามี.disabledคลาส กรุณาใช้มัน

แต่.disabledคลาสจะใช้ได้เฉพาะเมื่อแท็ก "a" มีคลาส "btn" อยู่แล้วเท่านั้น มันใช้ไม่ได้กับแท็ก "a" เก่า ๆ btnระดับอาจจะไม่เหมาะสมในบริบทบางอย่างที่มันมีความหมายสไตล์ ภายใต้ฝาครอบ.disabledชั้นเรียนpointer-eventsจะตั้งค่าเป็นnoneดังนั้นคุณสามารถสร้าง CSS เพื่อทำสิ่งเดียวกับที่ Saroj Aryal และ Vitrilo ได้รับความนิยม (ขอบคุณ Les Nightingill สำหรับคำแนะนำนี้)


3
คลาส. disabled จะใช้ได้เฉพาะเมื่อแท็ก 'a' มีคลาส 'btn' อยู่แล้ว มันใช้ไม่ได้กับแท็ก "a" เก่า ๆ คลาส 'btn' อาจไม่เหมาะสมในบางบริบทเนื่องจากมีความหมายแฝงสไตล์ ภายใต้ฝาครอบคลาส. Disabled จะตั้งค่าตัวชี้เหตุการณ์เป็นไม่มีดังนั้นคุณสามารถสร้าง css เพื่อทำสิ่งเดียวกับที่ Saroj Aryal และ Vitrilo ได้รับความนิยม
Les Nightingill

ขอบคุณสำหรับความคิดเห็นโดยละเอียด มันชี้แจงมากสำหรับผู้ใช้จำนวนมาก ฉันขอใช้ข้อความจากความคิดเห็นของคุณเพื่อขยายคำตอบได้ไหม
Yevgeniy Afanasyev


5

เพียงแค่ลบhrefแอตทริบิวต์ออกจากแท็กจุดยึด


2
ในบางเบราว์เซอร์ที่ลบ href เพียงแค่ตั้งค่า href เป็น / หรือเพจปัจจุบัน
พหุนาม

ฉันคิดว่านี่ควรเป็นแนวทางแรก
Bas Slagter

5

วิธีที่ดีที่สุดคือการป้องกันการกระทำเริ่มต้น ในกรณีของแท็กจุดยึดพฤติกรรมเริ่มต้นจะเปลี่ยนเส้นทางไปยังhrefที่อยู่ที่ระบุ

ดังนั้นการติดตาม javascript จึงทำงานได้ดีที่สุดในสถานการณ์:

$('#ThisLink').click(function(e)
{
    e.preventDefault();
});

4

คุณสามารถใช้เหตุการณ์ onclick เพื่อปิดใช้งานการดำเนินการคลิก:

<a href='' id='ThisLink' onclick='return false'>some text</a>

หรือคุณจะใช้อย่างอื่นที่ไม่ใช่<a>แท็กก็ได้


คุณสามารถรวมสิ่งนี้เข้าด้วยกันtext-decoration: noneและ.disabledLink { color: #000 !important; }ทำให้ดูเหมือนข้อความทั่วไป
พหุนาม

1
javascript เสือกเป็นทางออกที่แย่มาก
jahrichie

4

ความคิดเห็นของ Jason MacDonald ใช้ได้ผลสำหรับฉันทดสอบใน Chrome, Mozila และ IE

เพิ่มสีเทาเพื่อแสดงเอฟเฟกต์ปิดการใช้งาน

.disable_a_href{
    pointer-events: none;
    **color:#c0c0c0 !important;**
}

Jquery ถูกเลือกองค์ประกอบแรกเท่านั้นในรายการสมอเพิ่มตัวละครเมตา (*) เพื่อเลือกและปิดการใช้องค์ประกอบทั้งหมดที่มี #ThisLinkID

$("#ThisLink*").addClass("disable_a_href"); 

4

เขียน jQuery Code บรรทัดเดียว

$('.hyperlink').css('pointer-events','none');

หากคุณต้องการเขียนในไฟล์ css

.hyperlink{
    pointer-events: none;
}

3

สร้างคลาสต่อไปนี้ในสไตล์ชีต:

  .ThisLink{
           pointer-events: none;
           cursor: default;
    }

เพิ่มคลาสนี้ให้คุณเชื่อมโยงแบบไดนามิกดังต่อไปนี้

 <a href='' id='elemID'>some text</a>

    //   or using jquery
<script>
    $('#elemID').addClass('ThisLink');
 </script>

สิ่งนี้แตกต่างจากคำตอบของ Jason MacDonald อย่างไร?
พนักงานทุกคนมีความจำเป็น


1

เพียงแค่ใน SASS:

.some_class{
     // styles...

     &.active {
       pointer-events:none;
     }
}

แม้ว่ารหัสนี้อาจตอบคำถามได้ แต่การให้บริบทเพิ่มเติมเกี่ยวกับสาเหตุและ / หรือวิธีการตอบคำถามจะช่วยเพิ่มมูลค่าในระยะยาวได้อย่างมาก โปรดแก้ไขคำตอบของคุณเพื่อเพิ่มคำอธิบาย
Toby Speight

1

นี่เป็นวิธีที่ฉันใช้ปิดการใช้งานหวังว่าจะช่วยได้

$("#ThisLink").attr("href","javascript:;");

1
นี่คือทางออกที่ง่ายแสนง่ายและควรได้รับการยอมรับ!
Si8

-1
$('#ThisLink').one('click',function(){
  $(this).bind('click',function(){
    return false;
  });
});

นี่เป็นอีกวิธีหนึ่งในการดำเนินการนี้ตัวจัดการreturn falseที่จะปิดการใช้งานลิงก์จะถูกเพิ่มหลังจากคลิกเพียงครั้งเดียว


-4

วิธีที่ง่ายที่สุด

ใน html ของคุณ:

<a id="foo" disabled="true">xxxxx<a>

ใน js ของคุณ:

$('#foo').attr("disabled", false);

หากคุณใช้เป็นแอตทริบิวต์ทำงานได้อย่างสมบูรณ์


3
ปิดใช้งานไม่ใช่แอตทริบิวต์ที่ถูกต้องสำหรับแท็ก <a>
Josepas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.