jQuery ปิดการใช้งานลิงค์


284

ใครรู้วิธีปิดการใช้งานลิงค์ jquery โดยreturn false;ไม่ต้องใช้?

โดยเฉพาะสิ่งที่ฉันพยายามทำคือปิดการใช้งานลิงค์ของรายการทำการคลิกโดยใช้ jquery ซึ่งเป็นตัวกระตุ้นบางสิ่งจากนั้นเปิดใช้งานลิงก์นั้นอีกครั้งเพื่อให้ถ้ามันถูกคลิกอีกครั้ง

ขอบคุณ เดฟ

UPDATE นี่คือรหัส สิ่งที่ต้องทำหลังจากใช้.expandedคลาสแล้วเพื่อเปิดใช้งานลิงค์ที่ถูกปิดใช้งานอีกครั้ง

$('ul li').click(function(e) {
    e.preventDefault();
    $('ul').addClass('expanded');
    $('ul.expanded').fadeIn(300);
    //return false;
});

7
ทำไมความต้องการไม่ใช้คืนเท็จ? ใช้มันแล้วลบตัวจัดการเหตุการณ์เมื่อมันไม่ได้ใช้อีกต่อไป (หรือใส่เงื่อนไขในการคืนค่าที่แตกต่างกันขึ้นอยู่กับสถานะของ "บางสิ่ง" ที่กล่าวถึง)
Quentin

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

มิฉะนั้นคุณสามารถอธิบายได้ว่าทำไมคุณถึงใช้วิธีนี้เนื่องจากความเข้าใจที่ดีขึ้นของพื้นที่ปัญหาจะปรับปรุงคำตอบ
Lazarus

@lazarus ฉันขอเสนอ 2 คลิกในลิงค์เดียวกัน 1 ในการทำบางสิ่งก่อนจากนั้นจึงเลือกที่ 2 เพื่อรักษาลิงก์เป็นลิงก์
davebowker

@daviddorward จนถึงตอนนี้ฉันได้ลองส่งคืนเท็จแล้วมันยังคงดำเนินต่อไปจนถึงส่วนที่สองของเป้าหมายของฉันนั่นคือไม่อนุญาตให้การคลิกครั้งที่สองผ่านไป หากคุณสามารถเขียนตัวอย่างสั้น ๆ ฉันจะขอบคุณมากที่สุด
davebowker

คำตอบ:


364
$('#myLink').click(function(e) {
    e.preventDefault();
    //do other stuff when a click happens
});

ที่จะป้องกันพฤติกรรมเริ่มต้นของการเชื่อมโยงหลายมิติซึ่งจะไปเยี่ยมชม href ที่ระบุ

จากบทช่วยสอน jQuery :

สำหรับการคลิกและกิจกรรมอื่น ๆ ส่วนใหญ่คุณสามารถป้องกันพฤติกรรมเริ่มต้น - ที่นี่ตามลิงค์ไปยัง jquery.com - โดยเรียก event.preventDefault () ในตัวจัดการเหตุการณ์

หากคุณต้องการpreventDefault()เท่านั้นหากเงื่อนไขบางอย่างเป็นจริง (สิ่งที่ถูกซ่อนสำหรับอินสแตนซ์), คุณสามารถทดสอบการแสดงผลของยูของคุณกับการเรียนการขยายตัว หากสามารถมองเห็นได้ (เช่นไม่ถูกซ่อน) ลิงก์ควรเริ่มทำงานตามปกติเนื่องจากคำสั่ง if จะไม่ถูกป้อนและดังนั้นพฤติกรรมเริ่มต้นจะไม่ถูกป้องกัน:

$('ul li').click(function(e) {
    if($('ul.expanded').is(':hidden')) {
        e.preventDefault();
        $('ul').addClass('expanded');
        $('ul.expanded').fadeIn(300);
    } 
});

3
ด้วย jQuery 1.7+ คุณสามารถเปิด / ปิดได้: stackoverflow.com/questions/209029/…
Lance Cleveland

หากมี href และ onclick สิ่งนี้จะใช้งานได้ $ ("# myLink") attr ('onclick', '') .click (ฟังก์ชั่น (e) {e.preventDefault ();});
Ronald McDonald

รับรู้ผ่านอาแจ็กซ์และ jquery ฉันสามารถซ่อน href ซื้อโดยมีการโทรกลับเพื่อป้องกันไม่ให้แครปเปอร์จากการรับลิงก์เหล่านี้ ขอบคุณมาก!
Cesar Bielich

โพสต์นี้มีวิธีที่ง่ายที่สุดในการใช้ bootstrapหวังว่าจะช่วยได้
shaijut

107

ลองสิ่งนี้:

$("a").removeAttr('href');

Edit-

จากรหัสที่อัปเดตของคุณ:

 var location= $('#link1').attr("href");
 $("#link1").removeAttr('href');
 $('ul').addClass('expanded');
 $('ul.expanded').fadeIn(300);
 $("#link1").attr("href", location);

3
การเล่นด้วย href นั้นดีมากเพราะเป็นวิธีที่รวดเร็วในการแยกการเชื่อมโยงซึ่งดำเนินการผ่านเหตุการณ์ onclick ฉลาดมาก ๆ !
daitangio

วิธีหวานในการป้องกันเบราว์เซอร์จากการเพิ่ม # ใน URI เมื่อทำhref="#"
Abela

65

สำหรับคนอื่นที่มาที่นี่ผ่าน google อย่างฉัน - นี่เป็นอีกวิธีหนึ่ง:

css:
.disabled {
  color: grey; // ...whatever
}

jQuery:
$('#myLink').click(function (e) {
  e.preventDefault();
  if ($(this).hasClass('disabled'))
    return false; // Do something else in here if required
  else
    window.location.href = $(this).attr('href');
});

// Elsewhere in your code
if (disabledCondition == true)
  $('#myLink').addClass('disabled')
else
  $('#myLink').removeClass('disabled')

โปรดจำไว้ว่า: ไม่เพียงแค่นี้เป็นคลาส css

class = "buttonstyle"

แต่ยังทั้งสองนี้

class = "buttonstyle ปิดใช้งาน"

เพื่อให้คุณสามารถเพิ่มและลบคลาสเพิ่มเติมด้วย jQuery ได้อย่างง่ายดาย ไม่จำเป็นต้องสัมผัส href ...

ฉันรัก jQuery! ;-)


2
นี้อนุมานว่าการเชื่อมโยงไม่ได้มีเป้าหมาย :)
dstarh

2
แทนที่จะทำทุกความแฟนซีนี้ทำไมไม่เพียงแค่กลัด onclick ที่สูงขึ้นใน dom ใช้on()ในการกรองa.disabledลิงก์ทั้งหมดและป้องกันการเริ่มต้น จากนั้นสิ่งที่คุณต้องทำคือสลับเปิด / ปิดคลาสที่ปิดใช้งานและลิงก์จะจัดการตัวเองเมื่อ "เปิดใช้งาน"
CodeChimp

ไม่จำเป็นสำหรับ "== จริง" - addClass ('ปิดใช้งาน') จะทำงานโดยไม่คำนึงถึง if(disabledCondition)
Fox Wilson

1
@fwilson == trueในขณะที่คุณกำลังที่ถูกต้องโดยสิ้นเชิงสำหรับโปรแกรมเมอร์เริ่มต้นมันเป็นเรื่องง่ายที่จะเข้าใจด้วย :)
carmenism

มีเหตุผลใดที่ไม่ทำให้มันง่ายขึ้นif ($(this).hasClass('disabled')) { e.preventDefault(); }?
เมียร์

58

นี่เป็นทางเลือกอื่น css / jQuery solution ที่ฉันชอบสำหรับการเขียนสคริปต์ที่สั้นลง:

CSS:

a.disabled {
  opacity: 0.5;
  pointer-events: none;
  cursor: default;
}

jQuery:

$('.disableAfterClick').click(function (e) {
   $(this).addClass('disabled');
});

7
จาก Mozilla : "คำเตือน: การใช้งานตัวชี้เหตุการณ์ใน CSS สำหรับองค์ประกอบที่ไม่ใช่ SVG เป็นการทดลองคุณลักษณะที่เคยเป็นส่วนหนึ่งของข้อกำหนดร่าง CSS3 UI แต่เนื่องจากปัญหาเปิดมากมายถูกเลื่อนออกไปเป็น CSS4"
เครื่องหมาย Duelin

1
เป็นการพิจารณาที่ดี แต่มันก็ทำงานได้ดีในเบราว์เซอร์สมัยใหม่ส่วนใหญ่
Peter DeWeese

คุณอาจต้องการพิจารณาการผูกมัด.prop("tabindex", "-1");หลังจากaddClass
Oleg Grishko

19

คุณสามารถลบคลิกเพื่อลิงค์ได้โดยทำตาม;

$('#link-id').unbind('click');

คุณสามารถเปิดใช้งานลิงค์อีกครั้งโดยทำตามขั้นตอนต่อไปนี้

$('#link-id').bind('click');

คุณไม่สามารถใช้คุณสมบัติ 'ปิดการใช้งาน' สำหรับลิงก์


1
สลับเปิดและปิดได้ง่ายกว่าเมื่อเทียบกับรุ่นอื่น
python1981

2
"คุณไม่สามารถใช้คุณสมบัติ 'ปิดการใช้งาน' สำหรับลิงก์" สงสัยว่าทำไมไม่มีความสอดคล้องกันระหว่างปุ่มและลิงก์สำหรับปิดใช้งาน "ปิดใช้งาน" ควรทำงานกับลิงก์ด้วยเช่นกัน มันเหมือนกับการบอกว่าสำหรับ Chevy car คุณจะต้องเหยียบคันเร่งเพื่อหยุด แต่สำหรับผู้ผลิตรถยนต์รายอื่นคุณต้องใช้คันโยกนี้ที่อยู่บนหลังคา
eaglei22

14

หากคุณไปเส้นทาง href คุณสามารถบันทึกได้

วิธีปิดใช้งาน:

$('a').each(function(){
    $(this).data("href", $(this).attr("href")).removeAttr("href");
});

จากนั้นเปิดใช้งานอีกครั้งโดยใช้:

$('a').each(function(){
    $(this).attr("href", $(this).data("href"));
});

ในกรณีหนึ่งฉันต้องทำเช่นนี้เพราะเหตุการณ์การคลิกถูกผูกไว้กับที่อื่นและฉันไม่สามารถควบคุมมันได้


12

ฉันมักจะใช้สิ่งนี้ใน jQuery เพื่อปิดการใช้งานลิงก์

$("form a").attr("disabled", "disabled");

คุณยังสามารถใช้$("form a").attr("disabled", false);เพื่อเปิดใช้งานอีกครั้ง
Alexander Ryhlitsky

9

ตัวอย่างลิงค์ html:

        <!-- boostrap button + fontawesome icon -->
        <a class="btn btn-primary" id="BT_Download" target="blank" href="DownloadDoc?Id=32">
        <i class="icon-file-text icon-large"></i>
        Download Document
        </a>

ใช้สิ่งนี้ใน jQuery

    $('#BT_Download').attr('disabled',true);

เพิ่มลงใน css:

    a[disabled="disabled"] {
        pointer-events: none;
    }

1
ฉันไม่เคยเจอคุณสมบัติ CSS นี้มาก่อน แต่สำหรับฉันนี่เป็นวิธีที่ง่ายที่สุดในการปิดใช้งานการเชื่อมโยงหลายมิติ ความสวยงามของมันคือเมื่อคุณลบคลาสที่มีpointer-events: noneคุณสมบัติจากองค์ประกอบสมอพวกเขากลับไปทำสิ่งที่พวกเขาทำก่อนหน้านี้เมื่อคลิก ดังนั้นหากพวกเขาเป็นไฮเปอร์ลิงก์พื้นฐานพวกเขาจะกลับไปที่ URL ในhrefแอตทริบิวต์ของพวกเขาและหากพวกเขามีการตั้งค่าตัวจัดการเหตุการณ์การคลิก ง่ายกว่าการบันทึกhrefค่าและตัวจัดการการคลิก
Philip Stratford

ฉันชอบวิธีนี้มันเป็นวิธีที่ง่ายที่สุด
หลุยส์

ออกจากกำมือของ "การแก้ปัญหา" เมื่อไม่มีอะไรทำงาน (และเกือบจะให้ขึ้นเส้นทางนี้) ที่มาถึงนี้อัญมณี มันเป็นวิธีที่ไม่ยุ่งยาก และมีเพียงอันเดียวเท่านั้นที่ทำงานได้อย่างแท้จริง ความรุ่งโรจน์
user12379095

5

รายการโปรดของฉันใน "เช็คเอาต์เพื่อแก้ไขรายการและป้องกัน - ฟังก์ชั่น Wild West คลิกที่ใดก็ได้ - ในขณะที่เช็คเอาต์"

$('a').click(function(e) {
    var = $(this).attr('disabled');
    if (var === 'disabled') {
        e.preventDefault();
    }
});

ดังนั้นหากฉันต้องการให้ลิงก์ภายนอกทั้งหมดในแถบเครื่องมือแอ็คชันที่สองควรปิดใช้งานในขณะที่อยู่ใน "โหมดแก้ไข" ตามที่อธิบายไว้ข้างต้นฉันจะเพิ่มในฟังก์ชั่นแก้ไข

$('#actionToolbar .external').attr('disabled', true);

ลิงค์ตัวอย่างหลังจากไฟไหม้:

<a href="http://goo.gl" target="elsewhere" class="external" disabled="disabled">Google</a>

และตอนนี้คุณสามารถใช้คุณสมบัติที่ปิดใช้งานสำหรับลิงก์

ไชโย!


3

คุณควรจะหาคำตอบของคุณที่นี่

ขอบคุณ @Will และ @Matt สำหรับโซลูชันที่สง่างามนี้

jQuery('#path .to .your a').each(function(){
    var $t = jQuery(this);
    $t.after($t.text());
    $t.remove();
});


2

เพียงแค่ทริกเกอร์สิ่งของตั้งค่าสถานะคืนค่าเท็จ หากมีการตั้งค่าสถานะ - ไม่ทำอะไรเลย


ลองทำสิ่งนั้นด้วยการตั้งค่าคลาสจากนั้นเรียกคลาสนั้นในภายหลัง แต่กลับมาดำเนินการผิด ๆ และป้องกันไม่ให้มีการเรียกลิงก์
davebowker


0

ฉันรู้ว่านี่ไม่ใช่ jQuery แต่คุณสามารถปิดการใช้งานลิงค์ด้วย CSS ง่ายๆ:

a[disabled] {
  z-index: -1;
}

HTML จะมีลักษณะเช่น

<a disabled="disabled" href="/start">Take Survey</a>

0

สิ่งนี้ใช้ได้กับลิงก์ที่มีชุดคุณสมบัติ onclick ในบรรทัด นอกจากนี้ยังช่วยให้คุณสามารถลบ "คืนเท็จ" ในภายหลังเพื่อเปิดใช้งาน

        //disable all links matching class
        $('.yourLinkClass').each(function(index) {
            var link = $(this);
            var OnClickValue = link.attr("onclick");
            link.attr("onclick", "return false; " + OnClickValue);
        });

        //enable all edit links
        $('.yourLinkClass').each(function (index) {
            var link = $(this);
            var OnClickValue = link.attr("onclick");
            link.attr("onclick", OnClickValue.replace("return false; ", ""));
        });

-2

$("a").prop("disabled", true);ใช้เพียงแค่ นี่จะปิดการใช้งานองค์ประกอบการเชื่อมโยง prop("disabled", true)จะต้องมีการ อย่าใช้attr("disabled", true)

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