#javascript #jquery #json
#javascript #jquery #json
Вопрос:
Я получаю JSON
и заполняю элементы управления моей формы соответствующими данными. Все элементы управления работают нормально, кроме radio buttons
. В моей базе данных у меня есть значения для переключателей, сохраненные как BIT
.
Итак, я анализирую JSON и выполняю цикл для каждого элемента управления и присваиваю ему значение. Однако, похоже, я делаю что-то не так для on radio buttons
(возможно, оператор case или мой html). Есть идеи?
- Я использую jQuery 1.9
HTML
<div class="col-sm-5">
<label class="radio-inline">
<input type="radio" class="myform" value="1" name="testx">
YES
</label>
<label class="radio-inline">
<input type="radio" class="myform" value="0" name="testx">
NO
</label>
</div>
<div class="col-sm-5">
<label class="radio-inline">
<input type="radio" class="myform" value="1" name="highdanger">
YES
</label>
<label class="radio-inline">
<input type="radio" class="myform" value="0" name="highdanger">
NO
</label>
</div>
Мой цикл
$.ajax({
type: "GET",
cache: false,
url: serviceUrl "/ModuleTask/GetExamination" qstring,
// beforeSend: sf.setModuleHeaders,
contentType: "application/json; charset=utf-8"
}).done(function (result) {
var oResult = JSON.parse(result);
// reset form values from json object
$.each(oResult, function (name, val) {
var $el = $('[name="' name '"]'),
type = $el.attr('type');
switch (type) {
case 'checkbox':
$el.attr('checked', 'checked');
break;
case 'radio':
// $el.filter('[value="' val '"]').attr('checked', 'checked');
//$el.attr('checked', 'checked');
// $el.prop("checked", val);
//$el.filter('[value="' val '"]').prop("checked", true);
// $el.filter('[value="' true '"]').val(1);
$el.filter('[value="' val '"]').prop("checked", true);
break;
default:
$el.val(val);
}
});
}).fail(function (xhr, result, status) {
alert(result);
});
Ответ AJAX
{"ExaminationID":1,"UserID":44,"PortalID":0,"bloodcholisterol":1,"bloodldl":2,"bloodhdl":3,"bloodtriglycerides":4,"bloodglucose":5,"bodyweight":6,"bodyheight":7,"bodycircumference":8,"bodyexaminer":"DD","bodycomments":"a1","pressurestarttime":null,"pressureone":100,"pressuretwo":200,"pressurethree":300,"pressureexaminer":"B","pressurecomments":"B1","FileID":null,"agogiartiriakipiesi":null,"agogilipidia":null,"agogisakxarodidiaviti":null,"examinationcomments":"c1","highdanger":false,"sistaseis":"no sistaseis","axiologisiexaminer":"XH"}
Комментарии:
1. Проверка радио или флажков, отражающих настройки, которые у вас есть в вашей базе данных, не такая уж большая проблема. Я полагаю, что вы получаете свои данные json из
ajax
вызова. Я не понимаю, как была запущена функция, которую вы разместили здесь, и почему вы хотите сделать это таким образом. Возможно, поможет публикация более релевантного кода2. Какова результирующая ошибка? Заполняют ли они вообще что-нибудь?
3. @santi-elus Нет, они не заполняются. Ошибок нет
4. @Franco Я загружаю данные через ajax. цикл работает, если ajax успешно извлекает данные json. Я заполняю форму, когда страница загружается на основе ранее сохраненных данных.
5. Я не согласен с Франко. Ваш вопрос в порядке, и то, что вы просите, не является чем-то сложным или трудным для понимания. Оставьте свой вопрос как есть, и кто-нибудь на него ответит.
Ответ №1:
В вашем radio
случае switch вам нужно сначала преобразовать ваше boolean
значение в целое число. Отфильтруйте по этому целочисленному значению и измените атрибут checked на true. Попробуйте что-то вроде этого…
case 'radio':
var i = val ? 1 : 0;
$el.filter("[value='" i "']").attr("checked", true);
break;
Вот JSFiddle для демонстрации.
Комментарии:
1. Ха-ха, спасибо. Я VB. Сам сетевой парень, но иногда я что-то понимаю правильно