【问题标题】:Unobtrusive javascript with jsf components ... how?带有 jsf 组件的不显眼的 javascript ......怎么样?
【发布时间】:2012-05-03 10:06:17
【问题描述】:
我的页面上有一些 jsf 'commandLinks'。对于这些 commandLinks,有 onClick 事件。目前我已经直接写了onclick函数作为这些commandLinks的onclick属性。
因为它是一个commandLink,它会创建html锚标签,并附加一些jsf JavaScript用于表单提交。当我直接在 onclick 属性中编写 JavaScript 时,jsf 会在插入自己的 JavaScript 时处理该 JavaScript。但是当我通过 jQuery 附加相同的事件处理程序时,它不会在执行事件处理程序之前识别并提交表单。
这个问题有什么合适的解决办法吗?
【问题讨论】:
标签:
javascript
jquery
jsf
jquery-events
unobtrusive-javascript
【解决方案1】:
您需要让您的 jQuery 函数像 JSF 在幕后所做的一样:将onclick 属性中指定的自定义 onclick 函数包装在另一个函数中,该函数根据结果执行提交表单的标准 JSF 作业自定义 onclick 函数。
这是一个启动示例,假设所有这些链接元素都有一个 link 类,并且您的自定义 onclick 函数是 yourCustomFunction()。
$(".link").each(function(i, element) {
var originalJsfOnclick = element.onclick; // Grab the JSF-generated onclick function.
element.onclick = null; // Reset it.
$(element).click(function(event) {
if (yourCustomFunction()) { // First call your function.
originalJsfOnclick.call(element, event); // If it returns true, then execute the JSF-generated onclick.
}
});
});
function yourCustomFunction() {
// ...
}