使用jQuery生成PrimeFaces按钮,但点击事件会一遍又一遍地调用
这是我试图完成的。 我有一个带有两个JSF inputText和一个按钮的隐藏表单。 无论我在div
容器内部单击,我都会尝试计算相对于容器的x
和y
坐标。 然后使用jQuery将x
和y
的值设置为两个JSF inputText的值并提交表单。 JSF页面后面的托管bean将尝试捕获x和y提交的值。
以下是我的代码。 请让我知道我做错了什么,因为托管bean myBean
方法createNewInput
没有被正确调用。
EDIT2
Click an Element jQuery("#noteCol").click(function(e){ var offset = jQuery(this).offset(); e.stopPropagation(); jQuery("#result").text(this.id + "Offset: (" + offset.left + ", " + offset.top + "), " + "Relative Coordinate: (" + (e.pageX - offset.left) + ", " + (e.pageY - offset.top) + ")"); jQuery("#coordX").val(e.pageX - offset.left); jQuery("#coordY").val(e.pageY - offset.top); jQuery("#button").click(); });
在服务器端,当调用托管bean myBean
的方法createNewInput()
时,我打印出这对坐标。 很高兴,我看到两个坐标的正确结果。 但是, 它会一遍又一遍地打印这对坐标,但在第一次正确打印后,这对坐标的值为NaN
。 但是,我解决这个问题?
我不确定你为什么得到NaN
。 你在哪里看到它? 另外,如果你计算e.pageX - offset.left
而不是e.pageX - offset.left
,那对我来说更有意义。 此外,在jQuery中设置input元素的值应该由jQuery.val()
函数完成。
此外,JSF将使用表单ID预先生成生成的HTML输入元素ID,这将导致jQuery('#coordX')
返回任何内容。 jQuery采用HTML元素ID,而不是JSF组件ID。 您希望将prependId="false"
添加到
以禁用它。 但是你应该确保相同的输入组件在输出中不会出现一次,并且输入组件上没有任何其他父UINamingContainer
组件,这些组件也会在它们之前添加ID,为了validation这一点,你需要检查是否当你试图通过jQuery选择时,生成的HTML 确实有
id="coordX"
。
最后, jQuery.submit()
仅适用于HTML
元素,而不适用于按钮。 为此你宁愿使用jQuery.click()
代替。
所以,总结一下这应该在理论上适合你:
这是我的问题的解决方案。 问题是点击事件搞砸了。 所以为了阻止这一点
jQuery("#noteCol").click(function(e){ var offset = jQuery(this).offset(); e.stopPropagation(); jQuery("#result").text(this.id + "Offset: (" + offset.left + ", " + offset.top + "), " + "Relative Coordinate: (" + (e.pageX - offset.left) + ", " + (e.pageY - offset.top) + ")"); jQuery("#coordX").val(e.pageX - offset.left); jQuery("#coordY").val(e.pageY - offset.top); jQuery("#button").click(); }); jQuery("#button").click(function(e){ e.stopPropagation(); });