通过右键单击 Copy/Pastes 的客户端表单验证

Client side form validation for Copy/Pastes via Right-Click

我正在使用以下行(Struts1 语法)来显示文本字段并允许通过 Javascript 进行一些客户端检查。

<html:text styleId="myField" property="myProperty" onkeyup="function()" />

我的目的是在表单字段中输入文本(无论内容如何)时显示一条消息并禁用一个下拉菜单。 onkeyup 属性适用于所有情况,但用户使用鼠标右键单击粘贴文本时除外。

onmousedownonmouseup 事件似乎没有注意到右键单击。 onfocus 也是如此。

onchange 仅在失去焦点时进行检查,但是用户可以通过粘贴数据并单击表单提交来规避此问题(onblur 也是如此)。

onmouseout 在 IE8 中有些工作(我可以破坏功能),但在 Chrome v41.0.2272.89

中根本不起作用

有没有人遇到过鼠标右键单击客户端表单检查?我想涵盖跨浏览器的这个用例,不能指望最终用户总是通过键盘快捷键粘贴。

我按照上面评论中 的建议采用了 jQuery 解决方案。

最初我有这个功能:

$(document).ready(function(){
    $('#myField').bind("paste",function(e) {
        toggleFunction(); //preserve already existing function in use with other cases
    });
});

但后来发现虽然该函数会 运行 在用户粘贴之后,但它会 运行 在实际粘贴文本之前。

示例:

  1. User pastes (Right-click > paste OR Ctrl+V);

  2. Function is called and executes, condition checks made

  3. Text is pasted.

因此,我用预期的最终结果替换了 jQuery 中的函数调用,并在其他地方进行了一些额外的更改,以满足我的假设。

但是撇开这些条件不谈,下面的内容最终满足了我的需要。

$(document).ready(function(){
    $('#myField').bind("paste",function(e) {
        document.getElementById("dropdownID").disabled = true;  
        document.getElementById("showMessage").style.visibility = "visible";    
    });
});