Нужна помощь в понимании функции jQuery .val () - PullRequest
1 голос
/ 02 марта 2009
alert("data going into $hidden: " + selected.data[1]);

hidden.val(selected.data[1]);

alert("data now in $hidden: " + $hidden.val());

В чем причина того, что $ hidden.val () в последней строке выше вернет undefined? Я убедился, что selected.data [1] содержит целочисленное значение.

Редактирование # 1: Некоторый дополнительный контекст для комментариев: ($ hidden - скрытое поле ввода)

$.fn.extend({
    autocomplete: function(urlOrData, hidden, options) {
        var isUrl = typeof urlOrData == "string";
        var $hidden = $(hidden);
        options = $.extend({}, $.Autocompleter.defaults, {
            url: isUrl ? urlOrData : null,
            data: isUrl ? null : urlOrData,
            delay: isUrl ? $.Autocompleter.defaults.delay : 10,
            max: options && !options.scroll ? 10 : 150
        }, options);

        // if highlight is set to false, replace it with a do-nothing function
        options.highlight = options.highlight || function(value) { return value; };

        // if the formatMatch option is not specified, then use formatItem for backwards compatibility
        options.formatMatch = options.formatMatch || options.formatItem;

        return this.each(function() {
            new $.Autocompleter(this, options, $hidden);
        });

и ...

$.Autocompleter = function(input, options, $hidden) {
        //... 

        function selectCurrent() {
            var selected = select.selected();
            if (!selected)
                return false;

            var v = selected.result;
            previousValue = v;

            if (options.multiple) {
                var words = trimWords($input.val());
                if (words.length > 1) {
                    v = words.slice(0, words.length - 1).join(options.multipleSeparator) + options.multipleSeparator + v;
                }
                v += options.multipleSeparator;
            }


            alert("data going into $hidden: " + selected.data[1]);

            $hidden.val(selected.data[1]);

            alert("data now in $hidden: " + $hidden.val());

Редактирование # 2: Подробнее ... Я пытаюсь использовать расширение автозаполнения jQuery в форме с несколькими элементами управления текстовым полем (каждый из которых реализует автозаполнение). Рядом с каждым текстовым полем в форме есть отдельная кнопка, которая отправляет форму в функцию-обработчик, которая должна найти значение выбранного элемента и сохранить его в БД. Я подумал об этом, чтобы включить в форму скрытое поле для хранения выбранного значения.

Ответы [ 2 ]

1 голос
/ 02 марта 2009

Спасибо Паоло Бергантино. Я обнаружил, что я не передавал начальное скрытое с # перед идентификатором скрытого поля, поэтому $ hidden никогда не устанавливался должным образом. Мне было трудно отлаживать, потому что автозаполнение находится внутри элемента управления ascx как встроенный ресурс. Как только я убедился, что значение hidden включает в себя #, оно работает правильно.

0 голосов
/ 02 марта 2009

Может ли $ hidden быть флажком, который не отмечен?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...