我有一个输入和一个事件处理程序附加到它,由于某种原因,键盘事件不起作用。我已经看了一会儿,无法弄清问题是什么。当我在输入框中输入内容时,警报窗口甚至没有显示。
$(function () {
var tagField = $("#<%= EditTagNum.ClientID %>"); //asp.net code to get the generated client ID
$(tagField).on('keyup paste cut', function () {
alert('inside event handler');
var _this = this;
//because the paste event fires before the text has actually been
//pasted, I have to set a timeout. Once the timeout occurs, the text
//has then been entered into the input box.
setTimeout(function () {
var text = $(_this).val();
$(_this).val(text.replace(/\D/g, ''));
}, 0);
});
});
更新 我将代码更改为直接使用生成的客户端ID:
$(&#34;#ctl00_ContentPlaceHolder1_EditTagNum&#34)。在(.....
这并没有解决问题。但我确实发现,一旦我在控制台中运行我的事件处理函数,它就可以工作了。如果永远不附加事件处理程序。然而,当我在chrome中调试时,我发现它到达了附加处理程序的功能。它永远不会陷入其中。
答案 0 :(得分:1)
您可以检查这是否有效:
$(tagField).keyup(function() {
而不是
$(tagField).on('keyup paste cut', function () {
答案 1 :(得分:0)
var tagField = $("#<%= EditTagNum.ClientID %>");
这里 tagField本身就是一个jquery对象。然后你再次在jquery中包装这个对象。请尝试以下方法:
tagField.on('keyup paste cut', function () {
alert('inside event handler');
var _this = this;
//because the paste event fires before the text has actually been
//pasted, I have to set a timeout. Once the timeout occurs, the text
//has then been entered into the input box.
setTimeout(function () {
var text = $(_this).val();
$(_this).val(text.replace(/\D/g, ''));
}, 0);
});
});
它应该有用。
答案 2 :(得分:0)
而不是这个:'keyup paste cut',试试这个..“keyup paste cut”.. 过去为我神奇地工作过...... :)
答案 3 :(得分:0)
您可以使用
$(document).on('keyup', tagField, function() {...});
相反,如果您不确定在调用$(tagField).on('keyup',tagfield,...)时将tagField附加到DOM;