为什么更改事件处理程序不能与我的代码一起使用?

时间:2014-06-03 06:32:25

标签: jquery events onchange

我的脚本检测到某个文本输入上按下某个键的时间。这种方法的问题在于它还可以检测何时按下了移位和控制等按键。我只希望在实际更改文本输入时执行我的ajax脚本。就像我说的那样,on('keydown',function())可以工作,但是当我输入字段时,on('change',function())将不会做任何事情。不确定这里发生了什么。

$(document).on('change', '[rel^="liveSearch"]', function () {

            console.log('key pressed');
            if($(this).length >= 3){

                var fieldName = $(this).prop("name");
                var searchMenu = $('#liveSearch');

                $.ajax({
                    url: searchMenu.data('ajax-url')+'/'+$('input[name="'+fieldName+'"]').val(),
                    dataType: "xml",
                    statusCode: {
                        404: function(){alert("404 not found!")}
                    }
                })
                .done(function(xml){
                    if($(xml).find('member').length > 0){
                        $(xml).find('member').each(function(){
                            var memberId = $(this).attr("mid");
                            var memberName = $(this).find('displayname').text();
                            searchMenu.html('<li onclick="appendValue(\''+fieldName+'\', \''+memberId+'\');hideMenu(\''+searchMenu+'\');">'+memberName+'</li>');
                            searchMenu.show();
                        });
                    } else {
                        searchMenu.html('');
                        searchMenu.hide();
                    }
                });                 

            }

});

2 个答案:

答案 0 :(得分:0)

记住输入字段的上一个值。您可以将其存储在数据属性中。然后在keydown上比较两个值并仅在它们不匹配时执行ajax请求。这样,如果数据没有改变,你将避免命中服务器。

答案 1 :(得分:0)

change事件在您离开之前不会触发文本输入字段。

要检测何时在输入中键入了真实字符键,请使用keypress事件而不是keydown