栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JSF / PrimeFaces Ajax更新中断了jQuery事件侦听器功能绑定

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JSF / PrimeFaces Ajax更新中断了jQuery事件侦听器功能绑定

至于问题的原因,ajax请求将使用ajax响应中的新HTML元素更新HTML
DOM树。这些新的HTML元素确实(显然)没有附加jQuery事件处理程序功能。但是,

$(document).ready()
不会在ajax请求上重新执行。您需要手动重新执行它。

这可以通过多种方式来实现。最简单的方法是使用

$(document).on(event, selector,function)
而不是
$(selector).on(event,function)
。这与文档绑定,并且在匹配给定元素的元素上触发给定时
functionRef
,总是调用给
eventName
selector
。因此,您无需再通过JSF方式显式重新执行该功能。

$(document).on("change", ":input", function() {    console.log("From change event on any input: " + this.id);});

另一种方法是在ajax请求完成后自己显式重新执行该函数。当您真正有兴趣在

ready
/
load
事件期间立即执行该功能时,这是唯一的方法(例如,直接应用某些插件特定的行为/外观,例如日期选择器)。首先,您需要将
$(document).ready()
作业重构为可重用的函数,如下所示:

$(document).ready(function(){    applyChangeHandler();});function applyChangeHandler() {    $(":input").on("change", function() {        console.log("From applyChangeHandler: " + this.id);    });}

(请注意,我删除并简化了您完全不必要的

$.each()
方法)

然后,选择以下方式之一以在ajax请求完成时重新执行它:

  1. 使用

    oncomplete
    PrimeFaces命令按钮的属性:

    oncomplete="applyChangeHandler()"
  2. 使用

    <h:outputscript target="body">
    代替
    $(document).ready()

    <h:outputscript id="applyChangeHandler" target="body">applyChangeHandler();



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/470602.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号