Jquery UI按钮在刷新时被禁用

Dec*_*cko 10 jquery-ui jquery-ui-button

几周前我在jquery论坛上问了这个没有运气,所以我会在这里再试一次:)

我为我正在研究的项目制作了一个简单的小部件,但我遇到了一个奇怪的问题.

用示例实现来解释它是最容易的. http://decko.dk/buttontest

在页面上有3个按钮.第一个是我的下拉小部件.下一个是常规禁用按钮(A),最后一个是常规启用按钮(B).如果您然后刷新页面(按F5或其他),启用按钮现在神秘地被禁用.我不知道为什么会发生这种情况,但如果按钮A没有被禁用,则刷新时不会禁用按钮B. 此外,如果我在我的小部件代码中删除对insertAfter的调用,则不会禁用该按钮.任何人都可以阐明为什么会出现这种奇怪的行为?

顺便说一句,我只能在Firefox中重现这一点.

Jef*_* To 12

我相信这是Firefox记住表单字段/控件值和状态的错误:

  1. 第一页加载后,<button>文档中有三个元素,并被<button id="button_a">禁用.(当启用或禁用jQuery UI样式按钮时,它会将基础元素设置为相同的状态.)
  2. Firefox记得第二个<button>被禁用.
  3. 页面刷新后,在运行任何脚本之前,Firefox将恢复表单字段和控件.它禁用第二个<button>,但由于没有运行脚本,第二个按钮是<button id="button_b">.
  4. 当jQuery UI为其创建样式化按钮时<button id="button_b">,它会看到它被禁用并继续将其设置为禁用样式.

这里有两个问题:

  1. Firefox如何记住哪些元素被禁用.它没有考虑动态元素.我建议为此向Mozilla提交一个错误.
  2. 页面刷新后,表单元素保持禁用状态.我不确定这是否是正确的行为,但有两个bugzilla 报告.

测试用例可简化为仅<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>
Run Code Online (Sandbox Code Playgroud)


Chr*_*son 5

我也遇到了这个问题,并发现它归结为 Firefox 中的愚蠢行为,我的解决方法是这样的:

前:

//set up the buttons
$("button").button();
Run Code Online (Sandbox Code Playgroud)

后:

//set up the buttons (and make sure firefox behaves)
$("button").button().attr("autocomplete", "off");
Run Code Online (Sandbox Code Playgroud)