Выберите соответствующие переключатели из JSON с помощью цикла

#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. Сам сетевой парень, но иногда я что-то понимаю правильно