【问题标题】:Updating dialog title with jQuery使用 jQuery 更新对话框标题
【发布时间】:2012-05-15 18:38:51
【问题描述】:

我无法使用 jQuery 更新 p:dialog 的标题:

<p:commandButton value="#{msgs.ViewPersons}" oncomplete="
    jQuery('#ui-dialog-title-viewPersonsDlgId').text('ciao');
    viewPersonsDlg.show()"> 
...
<p:dialog modal="true" id="viewPersonsDlgId" 
    widgetVar="viewPersonsDlg" dynamic="true">

奇怪的是,第二个 Javascript 语句:viewPersonsDlg.show() 执行成功,我在 Firebug 中看不到错误。对话框的标题保持为空,或者显示我在对话框的 header 属性中添加的内容(如果存在)。

我不是 jQuery 专家,我从 primefaces forum 中获取了 jQuery 语法。可能是我误会了什么。

【问题讨论】:

  • 首先确保您的选择器返回正确的元素。从 firebug 控制台提示符调用 jQuery 命令jQuery('#ui-dialog-title-viewPersonsDlgId').text()并检查它返回的内容。如果它没有返回任何东西,那么您的选择器是错误的。如果页面上只有一个对话框,则可以使用类选择器选择其标题:jQuery('.ui-dialog-title').text();
  • 我已经用 Fallup 的解决方案解决了。还是谢谢

标签: javascript jquery jsf primefaces


【解决方案1】:

相信我,这个id 没有元素:#ui-dialog-title-viewPersonsDlgId。使用井号,您可以通过id 找到元素。 ui-dialog-titlespan 中的 spanclass dialog,其中定义了 titleviewPersonsDlgId 是它的 id。所以正确的代码是:

oncomplete="jQuery('#viewPersonsDlgId .ui-dialog-title').text('ciao');viewPersonsDlg.show()"

编辑:删除了答案的前一部分,这不是问题的原因。还有一件重要的事情是你必须指定正确的iddialog,所以如果它被放置在form 中并且你不在form 属性中使用prependId="false",那么使用...#formID\\:viewPersonsDlgId...(你必须在jQuery中用双斜杠转义“:”)

【讨论】:

  • 对不起,我忘了说我也试过了。相同的行为:没有错误,没有更新标题。
  • 有了对话框外的表单,没有 jQuery 一切正常。使用 update=":myFormId" 就足够了。但我想在对话框中移动表单,因为我读过有时另一种方式会出现问题。
  • 试试这个代码,我已经在简单的 sn-p 上测试过了,它工作正常。
【解决方案2】:

怎么样:

$('#myDialogId').dialog( "option", "title", "ciao" );

【讨论】:

  • 这会引发 Javascript 错误:$("#viewPersonsDlgId").dialog 不是函数。可能是因为 PrimeFaces 会自动嵌入特定版本的 jQuery?
  • 你确定你已经加载了 jquery-ui?
猜你喜欢
  • 2011-01-11
  • 2012-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-20
  • 2012-07-16
相关资源
最近更新 更多