我已经尝试查找可以在a4j:support事件属性中使用的所有可能事件的列表。我找不到列出它们的任何参考,也许有人可以提供链接? 我知道像onclick,onchange等明显的那些。
我问这个的原因是我目前有一个输入文本字段。它通过a4j:support标签附加了'onkeyup'事件。它应该在事件触发时启用文本框。 当用户右键单击鼠标并将内容粘贴到字段中时,事件不会触发。 是否有可用于确保此案例得到管理的替代事件?
<h:inputText id="someName" value="#{myBean.example.exampleName}" maxlength="25" style="width:280px">
<a4j:support event="onchange" reRender="exampleTab"
action="#{myBean.activateTabPanel}" ajaxSingle="true"
ignoreDupResponses="true" />
</h:inputText>
<rich:tabPanel id="exampleTab" switchType="server"
style="width:100%;height:448px;" styleClass="top_tab"
inactiveTabClass="inactive_tab" activeTabClass="active_tab"
selectedTab="#{myBean.exampleTabState.selectedTab}">
<!-- Various stuff in here --->
</rich>
我实际上最终使用了jQuery解决方案。更干净。任何感兴趣的人都附有代码。
jQuery(document).ready(function() {
// Call contructor
var common = new Site.Common();
});
// Constructor
Site.Common = function() {
// Only attach event listener if the element exists on page
if ( jQuery('input[id$="suggest"]') ) {
jQuery('input[id$="suggest"]').bind('paste', Site.Common.handleMousePaste.bind(this));
}
};
// Trigger the keyup event when user uses mouse to paste content info a field('element')
Site.Common.handleMousePaste = function(event) {
// Need to split the id (JSF adds the form name in front of the input field!)
var idParts = event.target.id.split(':');
// Reformat the id we will pass to jQuery (It does not understand formName:fieldName, need to escape the ':')
if (idParts.length >= 2) {
var formattedID = "#" + idParts[0] + "\\:" + idParts[1];
}
else {
var formattedID = "#" + event.target.id;
}
// Need to put a tiny delay in so the element has time to get the pasted in content.
setTimeout(function() { jQuery(formattedID).keyup(); }, 10);
};
由于
答案 0 :(得分:1)
您可以在js中检测粘贴事件,然后激活您的功能。
附件是处理类似问题的链接
改变检测到粘贴后发生的事情
if (event.ctrlKey && event.keyCode == 86) //Paste event
call your function
答案 1 :(得分:1)
单击鼠标(粘贴,单击等)时,键盘事件不会起作用。 据我所知,你正在寻找一个OnChange事件,但OnChange对你不好,因为 你需要事件将在输入文本获得的任何输入中触发。
解决方案是使用新的HTML5 OnInput事件。 OnInput事件在任何输入中触发,例如过去使用 鼠标,打字,使用键盘粘贴等
它还支持所有新浏览器,我测试它:IE9,IE10,IE11,Chrome,Firefox,Safari和Opera。
答案 2 :(得分:0)
event
属性的可能值列表未修复,如documentation中所述:
父组件的JavaScript事件属性名称(onclick,onchange等),我们将为此构建AJAX提交代码
基本上,这意味着您可以在event
属性中设置父组件上可用的任何onXXX
事件。
关于您的问题,您最终可以使用<a4j:support event="onkeyup">
复制<a4j:support event="onchange">
。
请注意,如果您的请求只是为了启用文本框,也许您可以使用JavaScript,而不是使用Ajax调用(即使用<a4j:support>
)。