环境:JSF 1.2 RI、RichFaces 3.3.2
我们利用 jQuery 来在项目获得或失去焦点时更改 CSS 类。这非常简单,但是当我们的部分渲染完成时,我们没有看到这些焦点和模糊事件绑定(bind)到新渲染的表单元素。这是可以预料的,因为文档准备好后这些事件不在 DOM 上,但是我们尝试使用几个插件(Listen 和 LiveQuery),因为 .live() 不能正确处理模糊和焦点事件在 1.3.2 中,也不在随 RichFaces 提供的版本中。这些插件中的每一个都应该处理放置在文档上的新创建的项目。但实际上,这些都没有按预期运行。
我们将输入/选择/文本区域包装在 div 或 span 中,以便根据 Ajax 请求更新各个部分的渲染。这是由于 RichFaces 中的限制,即在部分重新渲染时不会检查项目的渲染。除了那一小部分之外,没有什么太令人兴奋的事情发生。
我使用 $('ol').after(txtForNewListItem) 添加了项目,并确认 livequery 可以正确地处理这些项目,但不适用于由 JSF 新渲染的项目。
有人有类似的结果并找到合适的解决方法吗?我确实看到的一种方法是覆盖 document.createElement,但我们真的希望不惜一切代价避免这条路径。
最佳答案
如果我理解正确,您可以在文档准备好后添加 HTML 内容,使用 $('ol').after(txtForNewListItem)
。
所以你需要重建你的列表。我做了类似的事情。这是“伪”代码:
ol.append(
jQuery("<li/>")
.attr("id", "someID")
.append(jQuery("<span/>")
.addClass("btnRemoveItem")
.attr("title", "Remove item from list")
.attr("id", data[i].id)
.click(function() { alert('hello') })
)
.append("txtForNewListItem")
);
您需要对这段代码进行一些修改,但希望它能让您了解需要做什么。
啊...找到了我的帖子,在那里我得到了答案。看看这里:Not able to bind click event to newly created span items (jQuery)
关于jQuery 事件绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2009022/