【问题标题】:Javascript doesnt work after updating component更新组件后 Javascript 不起作用
【发布时间】:2014-08-02 22:31:04
【问题描述】:

上下文
在对话框中,用户可以按下按钮来填充名为 qPdt 的现有数据表。当他单击一行时,我希望将行文本插入到某个 inputTextArea 中。

问题
发生的情况是,如果我打开对话框并单击任何行,一切正常并按预期工作。但是,如果我打开对话框并按下按钮,我的脚本将不再工作/不再被调用。我必须关闭对话框并重新打开它才能使脚本正常工作。

可能我在这里缺少一些 javascript/jsf 基础知识。任何提示都会很好:)

代码

<script>
$('#accordion\\:duoDlgForm2\\:qPdt tr').on('click', function() {
  var $item = $(this).closest("tr").find("td:nth-child(1)").text().trim();
  $("#accordion\\:duoDlgForm2\\:rt1Selected").append($item);
  });
</script>

也尝试过(位于表单内部和外部)

<script>
$(document).ready(function() {
  $('#accordion\\:duoDlgForm2\\:qPdt').on('click','tr',function() {
  var $item = $(this).closest("tr").find("td:nth-child(1)").text().trim();
  $("#accordion\\:duoDlgForm2\\:rt1Selected").append($item);
  });
});
</script>

数据表:

<p:scrollPanel mode="native">  
  <p:dataTable id="qPdt" var="p" value="#{regelBean.queriedParams}" scrollable="false"
    emptyMessage="x" rowKey="#{p}" selection="" selectionMode="single">                            
    <p:column>#{p.name}
      <f:facet name="header" style="">Parameter</f:facet>
    </p:column>
  </p:dataTable>
</p:scrollPanel>

打开对话框的按钮

<p:commandButton id="selectButton" value="?" update=":stmtDetailForm :newDuoDlg" oncomplete="PF('newDuoDialog').show()" actionListener="#{regelBean.selectButtonHit(tVar)}">

用于填充数据表的按钮

<p:commandButton value="&lt;" update="qPdt regelDetail sp2" action="#{regelBean.findParams()}"/>

PF 4.0,IE9,使用包含。

【问题讨论】:

  • 可能你正在更新对话框或手风琴或表单,这会导致onclick 事件被破坏......尝试将事件绑定到更大的东西上......喜欢外部形式..无论如何用对话框和按钮的完整代码更新帖子。
  • 好吧,然后发布按钮...
  • 按钮进行更新。但是为什么这会破坏onclick 事件呢?我该如何解决这个问题?

标签: javascript jquery jsf primefaces datatable


【解决方案1】:

可能您正在更新对话框或手风琴或表单,这会导致事件被破坏...尝试将事件绑定到更大的东西上,例如document

JS

function bindDataTableSelection() {
   $(document).on('click', '.ui-datatable-selectable', function() {
     itemText = $('.ui-datatable-selectable.ui-state-highlight')
               .find("td:nth-child(1)").text().trim();
     $("#accordion\\:duoDlgForm2\\:rt1Selected").append(itemText);
   });
}

现在调用document.ready中的函数

了解更多:

希望对你有帮助

【讨论】:

  • 当我使用此方法并添加警报时,单击时得到的是“oldParam”“oldParam”“oldParam”,然后单击显示 oldParam 时我想要的参数还有三个次,有时是四次。为什么不止一次???为什么我需要点击两次?我的脚本是 $(document).ready(function (){ $(document).on('click',... 我没有为函数使用名称
  • 请不要在这里挑剔;)没有这个,你的解决方案对我来说是没有的。如果您拒绝在这里回答这个问题,请给我指点
【解决方案2】:

感谢 Hatem Alimam,我能够解决这个问题:-*

我将脚本绑定到滚动面板而不是数据表本身。这有效:

$(document).ready(function() {
    $('#accordion\\:duoDlgForm2\\:scrollPanelID').on('click','tr',function() {
    var $item = $(this).closest("tr").find("td:nth-child(1)").text().trim();
    $("#accordion\\:duoDlgForm2\\:rt1Selected").append($item);
    });
});

【讨论】:

  • 你必须小心,tr 选择器有点危险..基本上你在页面中的每个 tr 标签上绑定了这个点击事件..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-12
  • 2016-04-02
  • 1970-01-01
  • 2017-12-20
  • 2021-07-08
  • 2019-11-14
  • 1970-01-01
相关资源
最近更新 更多