代码之家  ›  专栏  ›  技术社区  ›  Damovisa

如何禁用页面上的所有按钮和链接,但仍然允许回发?

  •  0
  • Damovisa  · 技术社区  · 14 年前

    我试图阻止用户在页面上单击多个导致回发的元素。换句话说,如果他们单击“继续”提交按钮,在原始请求返回之前,他们不应该导致另一次回发。

    我试过两个版本的jQuery代码。也不是我想要的:

    .removeAttr('onclick')

    $(function() {
        $('a, :button, :submit').click(function() {
            var elements = $('a, :button, :submit');
            elements.attr('disabled', 'disabled').removeAttr('onclick');
        });
    });
    

    此版本禁用所有 其他 回发元素,但它允许我重用单击的同一个元素-我不想再按两次同一个按钮。

    $(function() {
        $('a, :button, :submit').click(function() {
            var otherelements = $('a:not(#' + $(this).attr('id') + '), :button:not(#' + $(this).attr('id') + '), :submit:not(#' + $(this).attr('id') + ')');
            elements.attr('disabled', 'disabled').removeAttr('onclick');
        });
    });
    

    如何防止这种行为?

    4 回复  |  直到 14 年前
        1
  •  2
  •   William Niu    14 年前

    我刚刚测试了第一种不使用JQuery的方法,效果很好,即禁用submit按钮并不能阻止表单提交。

    <form method="get">
      <input type="text" name="textfield" value="a" />
      <input type="submit" onclick="this.disabled=true">
    </form>
    

        2
  •  1
  •   rob waminal    14 年前

    也许您可以放置一个标志或一些它可以记住它被单击的按钮的东西,如果该标志存在,您可以删除引起postback的元素上的onclick事件。但我认为这不能仅在客户端脚本中完成,因为一旦提交了页面,所有客户端元素和脚本都会被刷新。

        3
  •  0
  •   soutarm    14 年前

    也许不是将其设置为click函数,而是将其设置为onmouseup,以便在click事件发生后触发。

        4
  •  0
  •   Damovisa    14 年前

    var submitted = false;
    $(function() {
        $('form').bind('submit', function() {
            if (!submitted) {
                submitted = true;
                return true;
            } else {
                return false;
            }
        });
    });
    

    谢谢大家的建议。