1

我有一个输入和一个事件处理程序,由于某种原因,keyup 事件不起作用。我已经看了一段时间,无法弄清楚问题所在。当我在输入框中输入内容时,甚至没有显示警报窗口。

$(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:

$("#ctl00_ContentPlaceHolder1_EditTagNum").on(.....

这并没有解决问题。但我确实发现,一旦我在控制台中运行我的事件处理函数,它就会起作用。如果从未附加事件处理程序。然而,当我在 chrome 中调试时,我看到它到达了附加处理程序的函数。它永远不会进入它。

4

4 回答 4

1

您可以检查这是否有效:

$(tagField).keyup(function() { 

代替

$(tagField).on('keyup paste cut', function () {
于 2013-10-29T17:39:08.823 回答
0

您可以使用

$(document).on('keyup', tagField, function() {...});

相反,如果您在调用 $(tagField).on('keyup', tagfield, ...); 时不确定 tagField 是否附加到 DOM;

于 2014-11-12T10:50:07.607 回答
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);
    });
});

它应该工作。

于 2013-10-29T17:43:06.383 回答
0

而不是这个:'keyup paste cut',试试这个..“keyup paste cut”..过去为我神奇地工作......!:)

于 2013-10-29T17:43:31.043 回答