【发布时间】:2018-07-27 20:15:01
【问题描述】:
我正在尝试使用 jquery 制作主题标签系统,但我对特殊字符 ctrl+V 和 mause right click paste 有疑问。我不想允许ctrl+v 和右键单击粘贴,我也不想允许像 (*/-+()[]{}?-_^|!'"<>&%,.:;`) 这样的特殊字符。
我们可以在我的代码中执行此操作吗?任何人都可以在这里帮助我吗?
这是DEMO页面
在这个演示中,您可以看到当您编写时,例如,jquery 代码会自动在世界之前添加 diez(#) 符号,例如 #how #are #you 。
这里是快速代码:
$(document).ready(function() {
$("body").on("keyup", "#hash", function(event) {
var keyCode = event.keyCode;
// Allow: backspace, delete, tab, escape et enter
if (
$.inArray(keyCode, [46, 8, 27]) !== -1 ||
// Allow: Ctrl+A, Command+A
(keyCode == 65 && (event.ctrlKey === true || event.metaKey === true)) ||
// Allow: Ctrl+Z, Command+Z
(keyCode == 90 && (event.ctrlKey === true || event.metaKey === true)) ||
// Allow: home, end, left, right, down, up
(keyCode >= 35 && keyCode <= 40)
) {
// let it happen, don't do anything
return;
}
if ($.inArray(keyCode, [32, 9, 13]) !== -1) {
var $textarea = $(this);
var text = $textarea.val();
text = XRegExp.replaceEach(text, [
[/#\s*/g, ""],
[/\s{2,}/g, " "],
[
XRegExp(
"(?:\\s|^)([\\p{L}\\p{N}]+)(?=\\s|$)(?=.*\\s\\1(?=\\s|$))",
"gi"
),
""
],
[XRegExp("([\\p{N}\\p{L}]+)", "g"), "#$1"]
]);
$textarea.val(text);
event.preventDefault();
event.stopPropagation();
event.stopImmediatePropagation();
}
});
});
.hash {
position:relative;
width:100%;
border:1px solid #d8dbdf;
outline:none;
padding:15px;
color:#292929;
}
.hash:focus {
border:1px solid red;
}
.container {
position:relative;
width:100%;
max-width:600px;
margin:0px auto;
margin-top:100px;
}
<script src="https://unpkg.com/xregexp@3.2.0/xregexp-all.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
<input type="text" class="hash" id="hash" placeholder="Write your word and press enter"/>
</div>
【问题讨论】:
-
@samuel 问题不仅是禁用复制粘贴部分,我还询问如何禁用写入特殊字符。
-
那仍然是duplicate of this one 并有适当的答案。
-
@Samuel 这个答案不允许我按空格。
标签: javascript jquery