a4j:支持事件onkeyup无法使用右键单击复制和粘贴

时间:2011-02-03 15:52:58

标签: jsf javascript-events richfaces

我已经尝试查找可以在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);

};

由于

3 个答案:

答案 0 :(得分:1)

您可以在js中检测粘贴事件,然后激活您的功能。

附件是处理类似问题的链接

link

改变检测到粘贴后发生的事情

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>)。