几周前我在 jquery 论坛上询问过这个问题,但没有成功,所以我会在这里再试一次:)
我为我正在从事的项目制作了一个简单的小部件,但遇到了一个奇怪的问题。
通过示例实现来解释它是最简单的。 http://decko.dk/buttontest
页面上有3个按钮。第一个是我的下拉小部件。下一个是常规禁用按钮 (A),最后一个是常规启用按钮 (B)。 如果您随后刷新页面(按 F5 或其他方式),则启用的按钮现在会神秘地禁用。 我不知道为什么会发生这种情况,但是如果按钮 A 一开始就没有被禁用,则刷新时按钮 B 将不会被禁用。另外,如果我在小部件代码中删除对 insertAfter 的调用,则该按钮将不会被禁用。 谁能解释为什么会出现这种奇怪的行为?
顺便说一句,我只能在 Firefox 中重现这一点。
最佳答案
我相信这是 Firefox 记住表单字段/控件值和状态的一个错误:
- 第一页加载后,有三个
<button>
文档中的元素,以及<button id="button_a">
被禁用。 (当启用或禁用 jQuery UI 样式按钮时,它会将底层元素设置为相同的状态。) - Firefox 记得第二个
<button>
已禁用。 - 页面刷新后,在运行任何脚本之前,Firefox 会恢复表单字段和控件。它禁用第二个
<button>
,但由于没有运行任何脚本,第二个按钮是<button id="button_b">
. - 当 jQuery UI 创建
<button id="button_b">
的样式按钮时,它发现它已被禁用,并继续将其样式设置为禁用。
这里有两个问题:
- Firefox 如何记住哪些元素被禁用。它没有考虑动态元素。我建议filing a bug with Mozilla为此。
- 页面刷新后,表单元素保持禁用状态。我不确定这是否是正确的行为,但有两个 bugzilla reports关于这一点。
测试用例可以简化为仅添加 <button>
动态元素并禁用 <button id="button_a">
,不需要 jQuery/jQuery UI:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>disabled button test</title>
<script type="text/javascript">
window.onload = function () {
var a = document.getElementById('button_a'),
menu = document.createElement('button');
menu.appendChild(document.createTextNode('Menu'));
document.body.insertBefore(menu, a);
a.disabled = true;
};
</script>
</head>
<body>
<button id="button_a">A</button>
<button id="button_b">B</button>
</body>
</html>
关于jquery-ui - Jquery UI 按钮在刷新时被禁用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2719044/