自动填充:在选择事件后阻止更改事件

时间:2016-01-25 17:27:20

标签: javascript php jquery html ajax

用户可以输入输入值:

  1. 从列表中选择一个(file.php返回一个json列表)。
  2. 或输入一个(我们检查是否存在ajax调用,file2.php)。如果成功(值存在),那么我们称之为“geo”。
  3. 问题是“geo”函数被调用两次,因为在select事件之后调用了change事件。

    这是我的代码:

    <input id="test">
    
    $("#test").autocomplete({
        minLength: 2,
        source:  "file.php",
        select:function(event,ui){
            var name = ui.item.value;
            geo(name);
        },
        change: function (event, ui) {
            $.ajax({    
                type:'POST',
                async:false,
                url:'file2.php',
                data:{'name':$('#test').val()},
                success:function(r){
                   o=JSON.parse(r);
                   geo(o.name);
                }
            });
        }
    });
    

    我尝试添加event.preventDefault();像这样:

    select:function(event,ui){
                var name = ui.item.value;
                geo(name);
                event.preventDefault();
            },
    

    但它不起作用......

    有什么想法吗?

2 个答案:

答案 0 :(得分:2)

尝试示例:

var selectedName = '';

$("#test").autocomplete({
    minLength: 2,
    source:  "file.php",
    select:function(event,ui){
        selectedName = ui.item.value;
        geo(selectedName);
    },
    change: function (event, ui) {
        if (selectedName === $('#test').val()) {
            return;
        }
        $.ajax({    
            type:'POST',
            async:false,
            url:'file2.php',
            data:{'name':$('#test').val()},
            success:function(r){
               o=JSON.parse(r);
               geo(o.name);
            }
        });
    }
});

答案 1 :(得分:0)

我认为这一变化与选择回调与输入元素事件的变化不同&amp;选择。

表示自动填充

选择列表项触发选择,然后更改 键入只是触发更改

表示输入元素

键入触发器“input / keyup / keydown / keypress”事件,当模糊触发“更改”事件时

如何在此处删除选择回调。无论是打字还是选择,无论如何都要改变。如果您不想检查选择,请在ajax之前添加一个确定语句。