jQuery prop。(“ disabled”,true)无法正常工作,.ether是.removeAttr('disabled');

时间:2019-06-17 19:54:47

标签: javascript jquery

由于某种原因,当我尝试通过运行重新启用按钮时:

$("#reloadSuggestions").removeAttr('disabled');

我也尝试过:

$("#reloadSuggestions").prop('disabled', false);

我尝试过的任何操作都不会删除禁用的属性,它将保留为空白。在控制台中,如果我运行$("#reloadSuggestions").removeAttr('disabled');,它将删除它,但是当我的实际代码运行时不会删除

PS为closed as off-topic回答了这个问题,没有人提供真正的解决方案。

当用户单击按钮时,按钮被禁用:

  <div style="overflow: hidden;">
      <p class="mb-1 pull-left mt-5">Select up to ten audiences</p>
       <button class="btn-text mt-5 mb-1 pull-right" id="reloadSuggestions"><i class="far fa-sync-alt"></i></button>
  </div>



$("#reloadSuggestions").click(function(e) {

    fetchSuggestedTargeting();
    $("#reloadSuggestions").prop("disabled", true);
});

如果用户未填写输入,我将再次启用该按钮:

function fetchSuggestedTargeting() {

    // set array of keywords
    var tagsinputKeywords = $("#interestTagInput").tagsinput('items')

    // Make sure user entered keywords
    if (tagsinputKeywords.length < 1) {

        $("#reloadSuggestions").prop('disabled', false);
        $("#searchSuggestedInterest").prop('disabled', false);;

        swal({
            title: "oops!",
            text: "Please enter atleast 1 keyword that describes your product.",
            imageUrl: "/alert-icon.png"
        });

        return;
    }
}

here is an example of the issue

编辑:

为弄清SO的电源跳闸模式,我试图在单击按钮并用于异步获取数据后重新启用按钮,一旦获取数据,我想为用户重新启用按钮才能再次单击它。

当尝试通过运行disabledfalse属性设置回$("#reloadSuggestions").prop('disabled', false);时,发生什么都没有

不确定这与有人询问如何更改属性的方式重复,这里的问题是,无论运行什么代码,除非我将其包装为超时,否则属性都不会更改。

2 个答案:

答案 0 :(得分:-1)

删除了我以前的答案,一开始并不清楚。

为什么完全禁用按钮?如果用户未填写任何内容,您已经有了通知,否则他们将在输入中单击带有关键术语的按钮。禁用此按钮还有其他原因吗?除了阻止用户多次单击它之外?

您还可以尝试将事件附加到Sweet Alert的“ onClose”。

swal({
            title: "oops!",
            text: "Please enter atleast 1 keyword that describes your product.",
            imageUrl: "/alert-icon.png",
            onClose: enableButton
        });

function enableButton() {

  $("#reloadSuggestions").prop('disabled', false);

  // anything else you wanted to happen after the modal closes

}

答案 1 :(得分:-2)

弄清楚如果我将代码包装成一个超时:

setTimeout(function () {

   $("#reloadSuggestions").prop('disabled', false);
}, 0);

我的代码可行,我想到了这个解决方案,因为我正在阅读this question来解决类似的问题

  

设置超时后,它实际上会将异步代码排入队列,直到引擎执行当前调用堆栈为止。

希望这可以帮助遇到此烦人问题的其他人。

由于显然不存在错误,here is an example of the issue