【问题标题】:How to disable Finish button after first click第一次单击后如何禁用完成按钮
【发布时间】:2016-09-06 17:24:20
【问题描述】:

我已经尝试了各种正常工作的方法,但 SmartWizard 似乎阻止了这些方法工作。

我需要禁用完成按钮并在单击后更改文本以防止多次提交。不管我把代码放在哪里,画面不变,按钮的值不变,按钮也没有禁用。

我尝试了典型的点击功能...

$(".actionBar .buttonFinish").click(function(){
    $(".actionBar .buttonFinish").addClass("buttonDisabled");
    $(".actionBar .buttonFinish").text("Sending...");
});

我还尝试将其用作最后一步验证的一部分,并在 ajax 调用之前的 FinishCallback 中使用。在 ajax 调用完成并且 ajax 成功运行之后,没有任何变化。

更新

好的,这肯定是时间问题。如果我导致 ajax 调用失败,按钮会禁用并且文本会更改。在继续进行 ajax 调用之前,我需要确保这两件事发生。到目前为止,我尝试了这个,但没有成功:

$(".actionBar .buttonFinish").addClass("buttonDisabled").text("Sending...").ajax({

【问题讨论】:

  • 您是否尝试过向事物添加日志记录,以确保点击处理程序正在触发?
  • 尝试使用 jQuery 的prop 函数将disabled 属性设置为true:$(".actionBar .buttonFinish").prop( 'disabled', true ); 假设它是<button>/<input> 元素。
  • 试试 $(".actionBar .buttonFinish").off('click')
  • 使用.one()
  • 为您提供按钮完成的html

标签: javascript jquery ajax smart-wizard


【解决方案1】:
$(".actionBar .buttonFinish").click(function(){
   $(".actionBar .buttonFinish").attr('disabled', 'disabled');
   $(".actionBar .buttonFinish").text("Sending...");
});

【讨论】:

  • 不好。该函数会触发,但在运行 ajax 调用后似乎会触发。我需要它在 ajax 之前运行。
【解决方案2】:

您可以在 'onclick' 事件的末尾添加此按钮以禁用按钮

$(this).prop( "disabled", true );

$(this).attr("disabled", 'disabled');

您需要根据 jquery 版本使用函数 'prop' 或 'attr'

【讨论】:

  • 不好。在 ajax 方法运行之前,链接按钮不会禁用并且文本不会更改。 SmartWizard 似乎首先运行它的功能。
  • 我不知道 SmartWizard ,但只需在点击功能的开头或 ajax 请求之前添加禁用代码
【解决方案3】:

试试这个。

$(document).ready(function(){
  $(function(){
    $(".buttonFinish").on("click", function(){
      $(this).prop('disabled', true);
      $(this).val("Sending...");
    });
  });
});
input{
  display: block
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>

<div>
  <form>
    <input type="text">
    <input type="text">
    <input class="buttonFinish" type="submit">
  </form>
</div>

更新

让我看看我是否理解你,你想在 ajax 调用之前禁用按钮和文本?你试过 beforeSend 吗?

$(document).ready(function(){
  $(function(){
    $("form").submit(function(e){
      e.preventDefault();
      
      $.ajax({
        beforeSend: function(){
          $(".buttonFinish").prop('disabled', true);
          $(".buttonFinish").val("Sending...");
        },
        complete: function(){
          // remove disabled and change the text
        },
      });
    });
  });
});
input{
  display: block
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>

<div>
  <form>
    <input type="text">
    <input type="text">
    <input class="buttonFinish" type="submit">
  </form>
</div>

【讨论】:

  • 我需要在 ajax 调用之前禁用 Finish 按钮。每次尝试显示 ajax 都会在按钮反映任何更改之前运行。所以如果ajax调用很慢或者延迟或者失败,用户可以不停的点击多次提交。
【解决方案4】:

由于你的.buttonFinish 是一个链接,而不是一个真正的按钮,你不能用.prop('disabled', true) 禁用它——你可能想使用一个“阻止窗格”。

在页面的最后放置一个 div,我更喜欢在 &lt;/body&gt; 标记之前,它不包含任何内容并且是看不见的,离开页面并且没有高度和宽度。

    <div id="blocker"></div>
</body>

单击“按钮”时,在其上添加一个类,使其显示,使用页面的完整高度/宽度和高 z-index,因此它位于其他所有内容的“前面”;它将获得所有不会传递到其下方控件的点击作为较低的 z-index。
您的点击处理程序将包括 $('blocker').addClass('blocking'); 提供生成的 DOM ...

    <div id="blocker" class="blocking"></div>
</body>

使用 CSS 设置 #blocker 的样式,使其不可见,然后设置 #blocker.blocking 的样式,使其遮挡页面的其余部分。

$('a.finished').click(function(e) {
  e.preventDefault();
  $('#blocker').addClass('blocking');
  // when ajax call finishes,
  // use $('#blocker').removeClass('blocking');
});
#blocker {
  position: fixed;
  top: -10px;
  left: -10px;
  height: 0;
  width: 0;
  z-index: -20;
  background-color: white;
}

#blocker.blocking {
  height: auto;
  width: auto;
  bottom: -10px;
  right: -10px;
  opacity: 0.6;
  z-index: 9000;
}
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.js"></script>
<div class="stuff">
  <p>This is stuff</p>
  <p>This is other stuff</p>
  <p>A <a href="#" class="finished">link</a> is in here.</p>
</div>
<div id="blocker"></div>

【讨论】:

    【解决方案5】:

    试试这个

    <input type='button' id='btn' onclick='click_me()' value='click'>
    
      var disable = false;
      function click_me()
      {
        if(disable = 'false') {
          $(".actionBar .buttonFinish").addClass("buttonDisabled");
          $(".actionBar .buttonFinish").text("Sending...");
          disable = true;
        }
      }
    

    【讨论】:

    • 实际禁用在哪里?添加一个类以使其看起来被禁用与实际禁用它不同。
    • SmartWizard 创建实际上是一个锚标签的“按钮”: 购买
    猜你喜欢
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 2019-09-23
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    相关资源
    最近更新 更多