关键字没有解雇的Jquery

时间:2013-10-29 17:29:41

标签: javascript jquery

我有一个输入和一个事件处理程序附加到它,由于某种原因,键盘事件不起作用。我已经看了一会儿,无法弄清问题是什么。当我在输入框中输入内容时,警报窗口甚至没有显示。

$(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中调试时,我发现它到达了附加处理程序的功能。它永远不会陷入其中。

4 个答案:

答案 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;