【问题标题】:Disable button with javascript使用 javascript 禁用按钮
【发布时间】:2021-12-01 07:21:04
【问题描述】:

我有一个按钮。该按钮工作正常。按下按钮后,将无法再次按下按钮。如果按钮看起来是禁用的,那将是最好的。

我已经尝试过 document.getElementById("id").disabled = true;但我无法完成这项工作。

按钮的 PHP 代码。该代码制作了一个按钮列表。每个按钮的 id=1、2、3 等。

if($_COOKIE["sorterdb"]=='GR' || empty($_COOKIE["sorterdb"])){$dblinjer[$i]['nrlink']='<span id="para'.$i.'"></span><div class="s-12 l-12"><button type="button" id="'.$i.'" value="'.$dblinjer[$i]['loebid'].'_'.$dblinjer[$i]['tid'].'_'.$dblinjer[$i]['utcstart'].'" onclick=baadimaal("baadimaal",this)>'.$dblinjer[$i]['buttonnrsejl'].'</button></div>';}

javascript:

function baadimaal(str,el) {
    var x = el.value
    var id = el.getAttribute("id")
    
    const xhttp = new XMLHttpRequest();
    xhttp.onload = function() {
        document.getElementById("container"+id).innerHTML = this.responseText; //her placeres svaret, som kommer tilbage fra hide-ajax-svar filen
    }
    xhttp.open("GET", "hide-ajax-svar.php?funk=" + str + "&para=" + x + "&i=" + id); //overfør str og x til hide-ajax-svar filen
    xhttp.send();
}

【问题讨论】:

  • 我在你的sn-p中没有看到任何禁用按钮的代码,你可以直接使用el like el.disabled = true;
  • 您好,tipman,当您将 disabled 设置为 true 时,按钮会像 objet 一样被禁用。您应该为此按钮设置一个属性。 buttonSelector.setAttribute('disabled',true);
  • @JoelGarciaNuño — 没有 addAttribute,只有 setAttributedisabled 属性是布尔值:简单地设置它会使元素被禁用。要将属性设置为 false,请使用 removeAttribute 或根据 Simone 的 评论直接分配给它。
  • 哦,您还可以让处理程序删除点击侦听器以及禁用按钮。
  • 您能否说明我应该在代码中设置的位置。我无法让任何建议发挥作用。

标签: javascript button disable


【解决方案1】:

您可以将按钮的 disabled 属性设置为 false(请参阅Sütemény András's answer),但这可能不适用于所有浏览器。您也可以移除监听器,但这不会使按钮看起来被禁用。

因此,腰带和大括号的方法是两者都做,例如

window.onload = function() {
  // Listener
  function clickFn() {
    console.log('I\'ve been clicked! But no more…');
    // Make button appear disabled
    this.disabled = true;
    // Remove the listener
    this.removeEventListener('click', clickFn);
  }
  // Add the listener to the button
  document.getElementById('b0').addEventListener('click', clickFn, false);
};
&lt;button id="b0"&gt;Click me&lt;/button&gt;

注意,如果使用 setAttribute 如:

button.setAttribute('disabled', true);

第二个参数是必需的,但它的值无关紧要(它可以是false、'foo bar'、42,等等)。无论值如何,元素都将被禁用,这是从古代将布尔属性添加到 HTML 的遗留问题。他们的存在独自完成了这项工作,他们不接受价值(例如&lt;button disabled&gt;foo&lt;/button&gt; 创建一个禁用按钮)。

要取消设置属性(即再次启用按钮),请使用removeAttribute

【讨论】:

  • 此代码似乎适用于一个按钮。我将输出编辑为 document.getElementById('0').addEventListener('click', clickFn, false);其中 0 代表我的第一个按钮的编号。如何修改代码以适用于所有按钮?它应该从 php 代码中的 id 读取按钮编号。
  • 有人可以在这个解决方案上提供更多帮助吗?
【解决方案2】:

如果你有这样的按钮:

<button class="button" id="1">Button 1</button>
<button class="button" id="2">Button 2</button>
<button class="button" id="3">Button 3</button>

您可以添加 javascript 事件监听器,完成这项工作,而不是禁用:

const buttons = document.querySelectorAll(".button")

buttons.forEach((item) => {
    item.addEventListener("click", ()=>{

    // DO SOMETHING WHITH YOUR BUTTON
    console.log(`You've clicked on ${item.id} and now I'm gonna disable it.`)

    // disable
    item.disabled = true;
    })            
})

根据您的代码,也许您应该在按钮上添加“removeEventListener”。

【讨论】:

  • 我无法完成这项工作。请注意,我有很多按钮,每个按钮的 id 为 1、2、3 等。请举例说明具体代码的外观。
  • 我已经更改了多个按钮的代码。
  • 可以更改代码,使用按钮的id吗?我在页面上还有其他不可禁用的按钮。请参阅我的第一个代码,它描述了按钮的定义方式。 $i 只是一个简单的计数器。
  • 如果它具有相同的类或 ID,它会禁用您单击的确切按钮。您也可以像这样使用 id:const buttons = document.querySelectorAll("#id"),如果它具有相同的 ID。如果不是,您可以为每个单独的 id 按钮使用不同的 eventListener,但这并不优雅。 ;)
猜你喜欢
  • 1970-01-01
  • 2016-08-16
  • 2018-10-10
  • 2010-09-07
  • 2011-03-02
  • 2016-05-03
  • 2022-07-06
  • 2010-12-30
  • 1970-01-01
相关资源
最近更新 更多