Удалить подстроку в jQuery - PullRequest
2 голосов
/ 27 февраля 2012

Я использую комбинированный список jQueryUI.Если пользователь вводит строку, которая не является option в элементе select, он создает новый элемент option с этим значением.Проблема в том, что в настоящее время он добавляет «undefined» к введенному значению.Как я могу удалить «неопределенную» подстроку перед отправкой?Вот код:

change: function(event, ui) {
    if (!ui.item) {
        var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex($(this).val()) + "$", "i"),
            valid = false;
        select.children("option").each(function() {
            if ($(this).text().match(matcher)) {
                this.selected = valid = true;
                return false;
            }
        });
        if (!valid) {
            new_value = self.options.precede_new_with + $(this).val();
            option = $('<option value="' + new_value + '">' + $(this).val() + '</option>');
            select.append(option);
            select.val(new_value);
            return false;
        }
    }
}​

Ответы [ 4 ]

2 голосов
/ 28 февраля 2012

похоже, проблема в том, что self.options.precede_new_with возвращает 'undefined'.

2 голосов
/ 28 февраля 2012

Вы имеете в виду эту строку?

new_value = self.options.precede_new_with + $(this).val();

При создании экземпляра комбинированного списка задайте для этой опции пустую строку:

$( "#combobox" ).combobox({
    precede_new_with: ''
});

Или измените реализацию, чтобы проверить наличиевозможно неопределенное, возвращая пустую строку в этом случае:

new_value = (self.options.precede_new_with || '' ) + $(this).val();
0 голосов
/ 01 марта 2012

Спасибо за ваши предложения, извините, мне понадобилось немного времени, чтобы вернуться, я был чертовски занят. В любом случае мне просто нужно было установить new_value равным $(this).val() и избавиться от self.options.precede_new_with.

0 голосов
/ 28 февраля 2012

При добавлении option вы можете проверить, не определено ли оно, а затем добавить к нему пустую строку. Таким образом, вам не нужно выполнять какую-либо обработку при отправке формы.

Попробуйте это.

if ( !valid ) {

   new_value = (self.options.precede_new_with || '') + $(this).val();
           //this will prepend empty string if undefined

   option = $('<option value="' + new_value + '">' + $(this).val() + '</option>');
   select.append(option);
   select.val(new_value);
   return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...