#php #jquery #rename
#php #jquery #переименовать
Вопрос:
У меня есть список входных данных, сгенерированных jQuery :
<input type='text' name='field[" j "]' />
<input type='file' name='field[" j "]' />
<textarea name='field[" j "]' value='' />
<textarea name='field[" j "]' value=''/>
j увеличивается, когда пользователь добавляет новое поле ввода, и оно, наконец, выглядит так :
<input type='text' name='field[0]' />
<input type='file' name='field[1]' />
<textarea name='field[2]' value='' />
<textarea name='field[3]' value=''/>
Теперь у пользователя есть возможность удалить поле с помощью кнопки, пример: если я удалил поле [2], это приводит к следующему :
<input type='text' name='field[0]' />
<input type='file' name='field[1]' />
<textarea name='field[3]' value=''/>
Проблема в том, что увеличенные поля больше не подходят позже, потому что вместо списка типа 0,1,2,3… У меня есть 0,1,3…
Я просто хочу изменить числовой атрибут полей после того, который был удален, чтобы соответствовать другим увеличенным полям
Еще одна вещь: пользователь может перетаскивать поля, чтобы изменить порядок. Итак, если 1 поле удалено, поле сразу после этого должно занять свое числовое место и так далее
Код для удаления поля :
$("#deletebtn").live("click", function(){
$(this).parent("li").remove();
});
Любая помощь будет очень признательна.
Ответ №1:
Вы можете опустить индекс, использовать только field[]
Комментарии:
1. Спасибо за ответ, я не могу удалить индекс, потому что он понадобится мне в моем коде позже
2. В чем причина, не похоже, что между индексом и полем существует особая связь, если вы хотите переназначить индекс.
3. Да, это потому, что после отправки я выполняю некоторые манипуляции с php, чтобы установить связь между массивом рангов и входными данными, поэтому входные данные должны иметь индекс, соответствующий рангу
4. Входные данные будут иметь индекс после отправки, они будут автоматически индексироваться, начиная с 0
5. Доктор Молл прав, если вы просто отправляете их на php, нет необходимости иметь какую-либо нумерацию в полях.
Ответ №2:
Добавьте общее имя класса ко всем элементам, используя порядок:
<input type='text' name='field[0]' class='dynamic-order' />
<input type='file' name='field[1]' class='dynamic-order' />
<textarea name='field[2]' value='' class='dynamic-order' />
<textarea name='field[3]' value='' class='dynamic-order' />
Затем, после удаления элемента, выполните итерацию по полям и задайте новый индекс:
$("#deletebtn").live("click", function(){
$(this).parent("li").remove();
$( ".dynamic-order" ).each(
function( index ) {
this.name = "field[" index "]";
}
);
});
Редактировать: Я обнаружил некоторые проблемы с вашим jsfiddle, вот исправленная версия:
По какой-то причине имена не всегда показывают самое последнее значение, вы должны проверить свойство на его наличие.
Комментарии:
1. Спасибо за ответ! Я пробовал это, и если я удаляю поле, индексы не меняются, пример: я нажимаю удалить в поле [2], а остальные не меняют свои индексы. Есть идеи?
2. Понятия не имею, если вы не ссылаетесь на страницу, где он используется 🙂
3. Ах, извините, это локально:/ Может быть, это потому, что входные данные генерируются jQuery
4. Ну, я пробовал с this.name = «field[test]»; и кажется, что единственный атрибут name, который изменяется, — это ввод непосредственно перед тем, который я удалил. Остальные сохраняют свои имена
5. Спасибо за обновление и вашу помощь! Это работает, если я удаляю ввод и добавляю другой (индекс следует за предыдущим), но если я удаляю ввод [1] между 2 другими, это все равно похоже на [0][2] [3] вместо [0][1][2]. Есть идеи?
Ответ №3:
Прежде всего: если вы используете это имя forms для публикации его с помощью php (или asp) в виде массива, вам нужно указать имя входных данных, вы можете использовать просто name=»field[]» .
Если вы хотите, чтобы таким образом были только имена, то введите в свой ввод класс:
<input type='text' class="input" name='field[0]' />
<input type='file' class="input" name='field[1]' />
<textarea class="input" name='field[2]' value='' />
<textarea class="input" name='field[3]' value=''/>
Затем с помощью jquery каждый раз, когда пользователь изменяет порядок / удаляет ввод, просто выполняйте эту функцию:
function re_order(class)
{
$('.' class).each(function(index,element){
this.name='field[' index']';
});
}
где class — это класс, присвоенный входным данным.
Комментарии:
1. class — это зарезервированное на будущее ключевое слово, просто указывающее на него: P developer.mozilla.org/en/JavaScript/Reference /…