установить значение в JQuery автозаполнения combobox - PullRequest
10 голосов
/ 01 июня 2011

Я использую комбобокс автозаполнения jquery и все в порядке. Но я также хочу установить конкретное значение с помощью JavaScript, например $("#value").val("somevalue"), и он должен выбрать элемент, но без изменений в элементе ввода с автозаполнением.

Конечно, я могу выбрать этот вход и установить значение напрямую, но есть ли другие способы сделать это? Я пытаюсь установить привязку к this.element как this.element.bind("change", function(){alert(1)}), но это не было никаких эффектов. И я не знаю почему.

Редактировать

Я нашел обходной путь для этого случая. Но мне это не нравится. Я добавил следующий код в функцию _create для ui.combobox

this.element.bind("change", function() {  
    input.val( $(select).find("option:selected").text());  
});

И когда мне нужно изменить значение, я могу использовать $("#selector").val("specificvalue").trigger("change");

Ответы [ 5 ]

27 голосов
/ 01 июня 2011

Является ли этой демонстрацией , что вы ищете?

Ссылка устанавливает значение автозаполнения пользовательского интерфейса jQuery равным Java . Фокус остается на входе, поэтому для навигации по параметрам можно использовать обычные события клавиатуры.

Редактировать: Как насчет добавления другой функции в комбинированный список, как это:

autocomplete : function(value) {
    this.element.val(value);
    this.input.val(value);
}

и вызов его со значением, которое вы хотите установить:

$('#combobox').combobox('autocomplete', 'Java'); 

Обновленная демоверсия

Я не могу найти ни одной доступной существующей функции, чтобы делать то, что вы хотите, но мне кажется, что это хорошо работает. Надеюсь, это ближе к тому поведению, которое вам требуется.

5 голосов
/ 08 октября 2013

@ andyb, думаю переписать:

    autocomplete: function (value) {
        this.element.val(value);

        var selected = this.element.children(":selected"),
                value = selected.val() ? selected.text() : "";
        this.input.val(value);
    }
5 голосов
/ 29 ноября 2012

Мне удалось быстро и грязно установить значение.Но вам нужно знать как значение, так и текст элемента, который вы хотите отобразить в раскрывающемся списке.

var myValue = foo; // value that you want selected
var myText = bar; // text that you want to display
// You first need to set the value of the (hidden) select list
$('#myCombo').val(myValue);
// ...then you need to set the display text of the actual autocomplete box.
$('#myCombo').siblings('.ui-combobox').find('.ui-autocomplete-input').val(myText);
2 голосов
/ 18 декабря 2012

Мне действительно нравится то, что сделал andyb, но мне нужно было немного больше поработать с обработкой событий, чтобы иметь возможность обрабатывать запуск события изменения, потому что «выбранный» не обрабатывается при нажатии ввода или потере фокуса на вводе ( нажатие на вкладку или щелчок мыши).

Таким образом, используя то, что andyb сделал в качестве базы, а также последнюю версию сценария автозаполнения jQuery, я создал следующее решение: DEMO

  • Введите: Выбирает первый элемент, если меню отображается
  • Фокус потерян: Частичное совпадение вызывает сообщение о не найденном и очищает запись (пользовательский интерфейс jQuery), но полностью набранный ответ «выбирает» это значение (без учета регистра)

Как можно изменить метод Change:

$("#combobox").combobox({
    selected: function (event, ui) {
        $("#output").text("Selected Event >>> " + $("#combobox").val());
    }
})
.change(function (e) {
    $("#output").text("Change Event >>> " + $("#combobox").val());
});

Надеемся, что это поможет тем, кому необходимы дополнительные функции события изменения, чтобы компенсировать пропуски, которые «выбраны», оставлены открытыми.

0 голосов
/ 01 июня 2011

http://jsfiddle.net/nhJDd/

$(".document").ready(function(){
    $("select option:eq(1)").val("someNewVal");
    $("select option:eq(1)").text("Another Val");
    $("select option:eq(1)").attr('selected', 'selected');

});

вот рабочий пример и jquery, я предполагаю, что вы хотите изменить значение выделения, изменить его текстовое лицо, а также выбрать его при загрузке страницы?

#

Попытка 2:

Вот еще одна скрипка: http://jsfiddle.net/HafLW/1/, вы имеете в виду, что вы выбираете опцию, затем хотите добавить это значение к автозаполнению области ввода?

$(".document").ready(function(){
     someString = "this,that";
        $("input").autocomplete({source: someString.split(",")}); 

    $("select").change(function(){
        alert($(this).val()+" appended");
someString = someString+","+$(this).val();
        $("input").autocomplete({source: someString.split(",")}); 


    });
});
...