Как изменить порядок полей формы с помощью jquery

#javascript #jquery

#javascript #jquery ( jquery ) #jquery

Вопрос:

У меня есть PHP-страница с такой формой, как эта:

 <form class="form3">
<label class="form3"><input type="checkbox"> Item-1</label>
<label class="form3"><input type="checkbox"> Item-2</label>
<label class="form3"><input type="checkbox"> Item-3</label>
<label class="form3"><input type="checkbox"> Item-4</label>
<label class="form3"><input type="checkbox"> Item-5</label>
</form>
  

У меня есть переменные javascript, установленные следующим образом:

 var checked = ["", "yes", "", "yes", ""];
  

Теперь, когда страница загружена, я хочу проверить, является ли проверенное значение «да», тогда я хочу сначала поместить эти входные элементы в список, а остальные позже, вот так:

 <form class="form3">
<label class="form3"><input type="checkbox" checked="checked"> Item-2</label>
<label class="form3"><input type="checkbox" checked="checked"> Item-4</label>
<label class="form3"><input type="checkbox"> Item-1</label>
<label class="form3"><input type="checkbox"> Item-3</label>
<label class="form3"><input type="checkbox"> Item-5</label>
</form>
  

Я предполагаю, что jQuery будет способом сделать это.
это означает, что мне нужно будет перебрать поля формы (что я не уверен, как это сделать) и внутри цикла проверить, является ли соответствующая переменная пустой или «да», и если да, распечатать это поле формы. Затем снова пройдите через тот же цикл и выведите все поля, где соответствующая переменная пуста.

Надеюсь, логика верна.

Я могу перебирать элементы формы следующим образом:

 $.each($('.form3'),function(i,e){
    if(checked[i] == "")
        {
            e.appendTo($('.form3'));
        }
});
  

НО
, очевидно, строка appendTo выдает мне ошибку:

 Uncaught TypeError: Object #<HTMLLabelElement> has no method 'appendTo'
  

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

Спасибо

Комментарии:

1. можете ли вы показать нам, что такое i и e?

2. i — номер индекса. e выбрал элемент <label> …… Я отредактировал приведенный выше код, добавив правильное имя класса к элементу формы.

Ответ №1:

Попробуйте это вместо:

 $('.form3').each(function(i,e) {

    if(checked[i] == "") {

        $(this).find('input[type=checkbox]').attr('checked', true);
        $(this).appendTo($('form'));

    }

});
  

Комментарии:

1. Когда я пытаюсь $(this) Я получаю эту ошибку: —————— Неперехваченная ошибка: HIERARCHY_REQUEST_ERR: Исключение DOM 3

2. Я добавил этот код, чтобы сделать выбранные флажки отмеченными’: ——— $( this).find(‘ввод [тип= флажок]’).attr(‘проверено’, true);

3. @ssdesign ладно, круто, рад, что смог помочь. Добавит его в ответ, чтобы другие могли его прочитать 🙂

Ответ №2:

вы думаете в правильном направлении, вот как я бы позаботился об этом:

 $('.form3').each(function(){
    var lbl = $(this);
    var chk = lbl.find('input[type=checkbox]');
    if(chk.attr('checked'))
    {
        lbl.prependTo($('#myForm'));
    }
});
  

вы можете найти рабочий пример здесь:
http://jsfiddle.net/saelfaer/LbMQG/1 /

Комментарии:

1. Это может привести к чему-то, но ваше предложение предполагает, что элементы уже проверены. Мне нужно проверить с помощью массива javascript и посмотреть, говорит ли соответствующее значение массива «да», затем переместить этот элемент вверх. Я изо всех сил стараюсь повторно использовать части вашего кода и посмотреть, может ли это меня куда-нибудь привести….

2. Как вы можете видеть, мне нужно добавить атрибут «проверено», если значение массива равно «да».

3. поскольку другой пример уже устранил вашу проблему, я не буду беспокоиться о том, чтобы изменить свою, поскольку это потребовало бы копирования именно того, что он сделал: P

4. Спасибо, что пришли на помощь. Спасибо.