【问题标题】:Client side form validation for Copy/Pastes via Right-Click通过右键单击复制/粘贴的客户端表单验证
【发布时间】:2015-06-29 17:26:30
【问题描述】:

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

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

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

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

onchange 仅在焦点丢失时进行检查,但用户可以通过粘贴数据并单击表单提交来规避这一点(onblur 相同)。

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

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

【问题讨论】:

  • 你想禁用paste吗?你见过这个:stackoverflow.com/q/15320069/1700321 吗?
  • @Aleksandr 不幸的是,我的工作是对一个应用程序进行增强,在这个应用程序中,用户需要复制+粘贴。但是,帖子中似乎有一个绑定到粘贴的 jquery 函数。我会调查的,谢谢。

标签: javascript html jsp struts-1


【解决方案1】:

我使用了上面 cmets 中 Aleksandr M 建议的 jQuery 解决方案。

最初我有这个功能:

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

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

例子:

  1. 用户粘贴(右键单击>粘贴或Ctrl+V);

  2. 函数被调用并执行,进行条件检查

  3. 文本已粘贴。

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

但除了这些条件之外,下面的内容最终可以满足我的需要。

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

【讨论】:

  • 如果有人解释上述 jQuery 行为并提供替代方案,我将更改我接受的答案。
猜你喜欢
  • 2015-08-08
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多