У меня два элемента формы. Одним из них является раскрывающийся список, который динамически заполняется через вызов getJSON. Другое стандартное текстовое поле ввода.
Когда форма загружается, раскрывающийся список заполняется. Текстовое поле будет "обычно" иметь в нем значение, так как это форма утверждения.
То, что я пытаюсь сделать, - это значение в моем раскрывающемся списке, которое соответствует значению в текстовом поле, - это выбранная опция. Это работает для меня с другими раскрывающимися списками этого типа, но в этом случае я думаю, что у меня проблема с пробелами в моих раскрывающихся значениях и в моем текстовом поле.
В проблеме, которую я имею, мое текстовое поле имеет значение "Большой красный сарай". (без кавычек). Одно из значений в моем раскрывающемся списке также имеет значение "Большой красный сарай". (без кавычек) Это должно быть выбранное.
Форма:
<select name="cu_vendors" id="cu_vendors">
</select>
<input type="text" name="ven_name" id="ven_name" />
Мой раскрывающийся список заполняется просто отлично.
JQuery:
$.getJSON("get-cu-vendors.html", function(data){
$('#cu_vendors').html('');
if(data && data.length > 0){
$('#cu_vendors').append("<option value='' class='red'>Required</option>");
$.each(data, function(key, value){
$("#cu_vendors").append("<option value=\""+$.trim(value)+"\">"+value+"</option>");
});
}else{
$('#cu_vendors').html('');
}
});
$("#cu_vendors option[value="+ $('#ven_name').val() +"]").attr('selected', 'selected');
Я получаю синтаксическую ошибку, но не то, что она есть:
Error: Syntax error, unrecognized expression: #cu_vendors option[value=Big Red Barn]
Итак, я думаю, что здесь есть пробелы. Есть ли способ в JQuery процитировать эти значения, когда я использую $ ('# ven_name'). Val() в моей последней строке выше?
Спасибо за любую помощь.
Две вещи. Во-первых, строка, которая устанавливает выбранную опцию, должна находиться внутри обратного вызова $.getJSON
или она будет выполняться до завершения вызова ajax. Во-вторых, поскольку значение в вашем селекторе имеет пробелы, это значение должно быть указано:
$.getJSON("get-cu-vendors.html", function (data) {
$('#cu_vendors').html('');
if (data && data.length > 0) {
$('#cu_vendors').append("<option value='' class='red'>Required</option>");
$.each(data, function (key, value) {
$("#cu_vendors").append("<option value=\"" + $.trim(value) + "\">" + value + "</option>");
});
$("#cu_vendors option[value='" + $('#ven_name').val() + "']").attr('selected', 'selected');
} else {
$('#cu_vendors').html('');
}
});
Из вашего сообщения об ошибке видно, что ваш селектор выглядит следующим образом:
#cu_vendors option[value=Big Red Barn]
Когда это должно выглядеть так:
#cu_vendors option[value="Big Red Barn"]
$("#cu_vendors option[value='"+ $('#ven_name').val() +"']")
должен сделать трюк.
Нет проблем с пробелами!
Обратите внимание на использование ": вы хотите иметь " value = "вещь с пробелами", а не "value = вещь с пробелами".
Кроме того, как уже сказал кто-то, вы можете увидеть его из сообщения об ошибке, что отсутствуют простые кавычки.
Я думаю, что вы пропускаете котировки вокруг селектора:
$("#cu_vendors option[value='"+ $('#ven_name').val() +"']").attr('selected', 'selected');