4

我有以下自动完成代码:

$(function() {
    var availableTags = [
                " x",
                "y",
                "z",
                "l",
                "m",
                "n",
                "o",
              ];

    $( ".tags" ).autocomplete({
          source: availableTags,position: { my : "left+2 bottom-50" , of:".tags"}
    });
 });

它工作正常,但是当我使用向上/向下键选择建议的文本时,所选文本会立即在文本字段中替换。相反,我希望仅在选择时按下 ENTER 时才替换它。有什么办法可以做到这一点?

4

2 回答 2

7

当查看建议元素时(也使用箭头键)触发focus事件,因此您可以简单地使用方法阻止默认操作preventDefault

焦点快速参考:

当焦点移动到一个项目(不是选择)时触发。默认操作是将文本字段的值替换为焦点项的值,但前提是事件是由键盘交互触发的。取消此事件会阻止更新值,但不会阻止菜单项获得焦点。

代码:

$(function () {
    var availableTags = [
        "ActionScript",
        "AppleScript",
        "Asp",
        "BASIC",
        "C",
        "C++",
        "Clojure",
        "COBOL",
        "ColdFusion",
        "Erlang",
        "Fortran",
        "Groovy",
        "Haskell",
        "Java",
        "JavaScript",
        "Lisp",
        "Perl",
        "PHP",
        "Python",
        "Ruby",
        "Scala",
        "Scheme"];



    $("#tags").autocomplete({
        source: availableTags,
        position: {
            my: "left bottom",
            at: "left top",
        },
        focus: function (event, ui) {
           event.preventDefault();
        }

    });
});

演示:http: //jsfiddle.net/IrvinDominin/TgmPQ/

于 2013-08-20T11:12:25.160 回答
3
focus: function (event, ui) {
       event.preventDefault();
 }

尝试这个。这不会改变你对专注的价值!请注意your-input-field-id输入字段的 id。

于 2013-08-20T10:59:52.990 回答