0

全部:

我正在使用 jquery/mvc/knockout 开发一个 Web 应用程序,该应用程序正在获取数据并使用 $.post 以相当昂贵的交易将其发布到服务器。

我不希望用户“双击”或不耐烦并单击两次。除了 UI 线索表明某些事情正在发生,我想出了一种我认为可以实现此目的的方法,但我想确保这样做没有警告或隐患。

下面是一个使用 setTimeout 模拟“通过 ajax 提交”请求的 JSFiddle。我将函数“alreadyClicked”上的一个内部字段设置为 true,运行“ajax 请求”,然后在后处理完成后将其设置回 false。如果您转到下面的小提琴并拥有一个支持 console.log 的调试器工具(a la firefox),您可以疯狂地点击并观察它进入方法以及何时跳过。

http://jsfiddle.net/puhfista/vVUCm/7/

感谢您提供有关此主题的任何建议,您喜欢渲染。

4

4 回答 4

1

你为什么不这样做:

$("<your element selector>").click(function(){
    $(this).attr('disabled', 'disabled');
    //  do your postback here
});

只是不要忘记在回发完成后重新启用该元素

于 2012-08-05T15:05:46.460 回答
1

您可以使用此插件在已经进行时阻止表单提交。

http://www.malsup.com/jquery/block/

于 2012-08-05T15:06:12.610 回答
0

你在你的问题中提到你在这个项目中使用了淘汰赛。实现您想要的淘汰方法是在您的视图模型中声明一个称为“isPosting”之类的可观察对象:

self.isPosting = ko.observable(false);

在提交按钮的 html 中,数据绑定到这个 observable:

<button data-bind="click:doPost, disable: isPosting">Submit</button>

在您的“doPost”点击处理程序中,您需要在帖子发生时将 isPosting 设置为 true,在帖子完成后将其设置为 false。

于 2012-08-06T15:29:19.770 回答
0

@DimitryV:那不是一个很好的解决方案。您会更好地键入提交事件,以便您捕捉到用户按 Enter 提交表单之类的事情。

$("form").submit(function () {
    $(this).attr('disabled', 'disabled');
    //  do your postback here
});

这样,您将捕获所有提交。只是作为一个注意事项!

于 2014-03-06T16:32:10.577 回答