19

我去检查最近发布的 jQuery 1.8 (stable) 是否与我当前正在开发的项目兼容,令我惊讶的是,这是我看到的第一件事:

在此处输入图像描述

这让我很惊讶,因为我已经升级到 jQuery UI 1.8.22,根据它的发布帖子,它与 jQuery 1.8 兼容。

回调函数是根据调用的,但是按钮没有textNodes ,正如在 DOM 检查器中看到的那样:

在此处输入图像描述

到目前为止,我发现的解决方案是:

  1. 降级回 jQuery 1.7.2(不过我想在我的页面中使用最新的 jQuery 版本)
  2. 升级到 jQuery UI 1.9.0pre(不稳定)
  3. 使用open处理程序或手动编辑对话框的 HTML 以包含我想要的文本。对于源代码中的错误,似乎有很多不必要的麻烦。

我错过了什么还是这是一个实际的错误?

这是我用于演示的小提琴:

jsFiddle

以及供将来参考的代码:

HTML

<div id="foo" title="Dialog title">Dialog text</div>

JS

$('#foo').dialog({
    buttons: {
        Yes: function() { $(this).dialog('close'); },
        No: function() { $(this).dialog('close'); }
    }
});
4

1 回答 1

18

编辑:

这是BugTracker 票

一个更简单的解决方案是在包含 jQuery 库后使用此代码段:

if ( $.attrFn ) { $.attrFn.text = true; }

jsFiddle

这个问题应该在 jQuery UI 1.8.23 发布后得到修复。来自 BugTracker 票务页面的 scott.gonzalez 的学分。

编辑:这已在UI 1.8.23中修复。


我的旧解决方案:(
如果您对上述解决方案有疑问,请使用它)

我已经对这个问题进行了临时修复(直到 UI 或核心的新稳定版本发布)。

jQuery 1.8 与 jQuery UI 1.8.22 交互存在一个错误,它将文本存储在 parentbutton的属性中,而不是在内部text创建:textNodespan.ui-button-text

在此处输入图像描述

在初始化 jQuery UIdialog或任何其他具有此 UI 按钮错误的界面后使用此代码段:

//iterate through all UI button text spans in the document
$('.ui-button-text').each(function() {
    var $this = $(this);
    if ($this.text() == '') //if it has no text (bugged)
        $this.text($this.parent().attr('text')); //sets the text which was passed
});

jsFiddle

该脚本会在执行任何操作之前检查 UI 按钮是否没有文本,因此即使您在升级到未来无错误版本的核心/UI 时忘记了它,保留它也是无害的。

如果您对此错误有更好的解决方案或信息,我很乐意接受。=]

请注意,如果您不能等待稳定版本并且仍想使用最新的稳定版本,您可以降级到 jQuery 1.7.2 或使用问题中提到的 UI 1.9.0 的预发布版本。

于 2012-08-10T19:56:33.030 回答