我正在尝试延迟点击链接的默认操作,直到用户点击“是”或“否”进行确认。问题是while循环冻结了浏览器(甚至没有显示对话框,即使首先调用“open”):
$(".remove").click(function() {
$("#dialog").dialog("open");
while (1) {
// Count sheep
}
});
显然,“1”仅用于测试目的。最终我希望它检查由对话框设置的变量。但就目前而言,我想知道如何使用这样的循环来延迟默认的点击操作。
谢谢,
迈克尔
答案 0 :(得分:4)
一个非常简单的答案是使用window.setInterval
而不是while循环,但这仍然不是一个好的答案。
正确的答案是让对话框在用户单击按钮时进行回调。编辑:因为你正在使用jQuery,你不必编写回调函数。对话框函数需要第二个回调参数:
$("#dialog").dialog("open", function() {
// do your stuff for when they click OK
});
答案 1 :(得分:4)
你做不到。您必须退出该对话框才能显示该功能。只要该功能正在运行,浏览器就不会进行任何更新。
您必须使用事件来处理用户输入。
答案 2 :(得分:3)
答案 3 :(得分:1)
您需要添加一行以防止Click事件的默认操作发生。
$(".remove").click(function(event) {
event.preventDefault();
$("#dialog").dialog("open");
....
});
答案 4 :(得分:1)
快速点:
最好,看起来你正在使用jQuery UI,你可以设置一个单击对话框按钮时要调用的函数。
$('form').dialog({
autoOpen: true,
buttons: {
"Yes": onRequestSubmit, // function defined elsewhere
"No": function () { $(this).dialog("close"); } // function defined here
},
modal: true
});
答案 5 :(得分:1)
一个大问题仍然存在......为什么不在变量发生变化时检查变量的值?
我已经使用setTimeout()来延迟循环来检查服务器以执行伪服务器推送(这意味着浏览器向服务器发送请求)。即使每隔10秒,它也消耗了太多的CPU资源并大大降低了浏览器的响应速度(特别是对于廉价的车间机器)。
在处理javascript时,您必须从桌面.NET事件驱动编程中改变您的思维范式。持久循环对性能没有好处。
有两种选择:
设计应用程序流程,使您知道代码中可以更改变量的位置,并检查变量是否在代码中的任何一个点执行时更改。我知道,如果你来自C#,C或C ++,这似乎难以理解。
但是,我认为更好的选择是创建一个隐藏的文本输入HTML表单项。
<FORM NAME='dingoSam'>
<INPUT TYPE='hidden' onChange='changed()' NAME='bingoSem'/>
</FORM>
我需要共享信号量的所有代码都会引用dingoSam.bingoSem来更改其值。
您应该利用浏览器的事件管理系统而不是创建自己的事件循环,因为javascript运行时利用其与OS进程的协作来优化其事件驱动程序。然而,用javascript编写的自己的事件循环远不是与OS进程的最佳协作。