通过右键单击 Copy/Pastes 的客户端表单验证
Client side form validation for Copy/Pastes via Right-Click
我正在使用以下行(Struts1 语法)来显示文本字段并允许通过 Javascript 进行一些客户端检查。
<html:text styleId="myField" property="myProperty" onkeyup="function()" />
我的目的是在表单字段中输入文本(无论内容如何)时显示一条消息并禁用一个下拉菜单。 onkeyup
属性适用于所有情况,但用户使用鼠标右键单击粘贴文本时除外。
onmousedown
和 onmouseup
事件似乎没有注意到右键单击。 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
});
});
但后来发现虽然该函数会 运行 在用户粘贴之后,但它会 运行 在实际粘贴文本之前。
示例:
User pastes (Right-click > paste OR Ctrl+V);
Function is called and executes, condition checks made
Text is pasted.
因此,我用预期的最终结果替换了 jQuery 中的函数调用,并在其他地方进行了一些额外的更改,以满足我的假设。
但是撇开这些条件不谈,下面的内容最终满足了我的需要。
$(document).ready(function(){
$('#myField').bind("paste",function(e) {
document.getElementById("dropdownID").disabled = true;
document.getElementById("showMessage").style.visibility = "visible";
});
});
我正在使用以下行(Struts1 语法)来显示文本字段并允许通过 Javascript 进行一些客户端检查。
<html:text styleId="myField" property="myProperty" onkeyup="function()" />
我的目的是在表单字段中输入文本(无论内容如何)时显示一条消息并禁用一个下拉菜单。 onkeyup
属性适用于所有情况,但用户使用鼠标右键单击粘贴文本时除外。
onmousedown
和 onmouseup
事件似乎没有注意到右键单击。 onfocus
也是如此。
onchange
仅在失去焦点时进行检查,但是用户可以通过粘贴数据并单击表单提交来规避此问题(onblur
也是如此)。
onmouseout
在 IE8 中有些工作(我可以破坏功能),但在 Chrome v41.0.2272.89
有没有人遇到过鼠标右键单击客户端表单检查?我想涵盖跨浏览器的这个用例,不能指望最终用户总是通过键盘快捷键粘贴。
我按照上面评论中
最初我有这个功能:
$(document).ready(function(){
$('#myField').bind("paste",function(e) {
toggleFunction(); //preserve already existing function in use with other cases
});
});
但后来发现虽然该函数会 运行 在用户粘贴之后,但它会 运行 在实际粘贴文本之前。
示例:
User pastes (Right-click > paste OR Ctrl+V);
Function is called and executes, condition checks made
Text is pasted.
因此,我用预期的最终结果替换了 jQuery 中的函数调用,并在其他地方进行了一些额外的更改,以满足我的假设。
但是撇开这些条件不谈,下面的内容最终满足了我的需要。
$(document).ready(function(){
$('#myField').bind("paste",function(e) {
document.getElementById("dropdownID").disabled = true;
document.getElementById("showMessage").style.visibility = "visible";
});
});