我尝试通过在用户键入不期望的密钥时添加警报来验证密钥代码输入,然后清除文本区域。警报功能正常,但文本区域无法清除。
我已查看了文档here,但我看不到包含.val()
行的区域。我也试过这个:$("#noteNumberInput").attr('value', "");
场景:我在文本框中输入1-9并且没有警报(工作正常),例如,如果我输入字母a-z,警告会弹出,但字母仍保留在文本框中。
我注意到的是它确实在第一个键之后清除了textarea。如果我输入字母' a'然后' b',' a'将被删除并替换为''
HTML:
<textarea id="noteNumberInput" placeholder="Note number"></textarea>
JS:
var noteNumberInput = document.getElementById("noteNumberInput");
//VALIDATE NOTE NUMBER TEXTAREA
function validate(key) {
var keycode = (key.which) ? key.which : key.keyCode;
//comparing pressed keycodes
if (keycode === 8 || (keycode >= 48 && keycode <= 57)) {
return true;
}
if (keycode < 48 || keycode > 57) {
alert("Please only enter the note number e.g. 1, 2..14 etc.");
$("#noteNumberInput").val("");
return false;
}
}
noteNumberInput.addEventListener("keydown", validate);
答案 0 :(得分:2)
当你执行$("#noteNumberInput").val('');
时,它会删除textarea的所有内容,所以如果不是这样,问题可能就在其他地方。
答案 1 :(得分:1)
使用$("#noteNumberInput").val()
将清除textarea
修改强>
问题是keydown
处理程序。在这种情况下,将触发该功能,然后显示警报&amp;然后将填充文本区域。但是在使用keyup
时,该功能将在释放密钥时触发。届时textarea
将填充值。
将keydown
更改为keyup
var noteNumberInput = document.getElementById("noteNumberInput");
noteNumberInput.addEventListener("keyup", validate);
答案 2 :(得分:1)
将noteNumberInput.addEventListener("keydown", validate);
更改为使用keyup
答案 3 :(得分:0)
当您按下下一个键时,您只需要submitHandler: function (form) {
var URL = $("#teacherForm").attr("action");
var METHOD = $("#teacherForm").attr("method");
$.ajax({
type: METHOD,
url: URL,
data: $(form).serialize(),
success: function (data) {
var data = $.parseJSON(data);
......
......
功能实际执行。
答案 4 :(得分:0)
我认为触发关键事件不是最好的主意,因为剪切和粘贴以及拖放也可以改变输入元素。
试试这个:
Element.addEventListener('input', function(){
this.value=this.value.replace(/[^0-9,.]/g, '');
});
这必须适应textarea ......