簡體   English   中英

禁用按鈕仍然使用“.click()”觸發

[英]Disabled button still fires using “.click()”

似乎禁用按鈕 “onclick”功能在觸發程序時仍然被觸發,例如:

<div>
   <input type="button" onclick="save()" id="saveButton"    value="save"  disabled="disabled" />
   <input type="button" onclick="byPassDisabled()" value="bypass disabled button"/>
<div id="counter">0</div>

function save(){
    var count = parseInt($('#counter').html());
    $('#counter').html(++count);
}
function byPassDisabled(){
     $('#saveButton').click();   
}

http://jsfiddle.net/WzEvs/363/

在我的情況下,鍵盤快捷鍵綁定到觸發按鈕上的“.click()”的功能。 我發現必須禁用shorcuts或檢查按鈕是否已被禁用非常煩人。 我更喜歡解決這個問題的一般解決方案。

  • 但為什么? 這種行為對我來說似乎不公平。
  • 任何解決方法?

該屬性僅禁用用戶交互,該按鈕仍可通過編程方式使用。

所以是的,你得檢查一下

function byPassDisabled(){
    $('#saveButton:enabled').click();   
}

或者,不要使用內聯處理程序。

$(document).on('click', '#saveButton:enabled', function(){
    // ...
});

為了將來使用... OP代碼可以工作,因為即使DOM元素被禁用,jQuery仍然會調用它自己的處理程序。 如果要使用vanilla javascript,則會禁用disabled屬性。

const element = document.getElementById('saveButton');
element.click() //this would not work

您可以通過編程方式觸發單擊禁用按鈕。

有一些方法可以查找事件是否是用戶單擊按鈕,或者是否已通過編程方式觸發。 http://jsfiddle.net/WzEvs/373/

$(function () {
    $("#saveButton").on('click', function (e) {
        if (!e.isTrigger) {
            var count = parseInt($('#counter').html());
            $('#counter').html(++count);
        }
    });
    $("#bypassButton").on('click', function (e) {
        $("#saveButton").click();
    });
});

如果以編程方式調用click()e.isTrigger為true。 基本上你是在代碼中手動觸發click事件。

你可以觸發click靜止,雖然它被disable 。正如Spokey說它只是顯示用戶交互(可用性仍然存在,可以通過編程方式打開)。 offunbind點擊將解決此問題。

謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM