найти 1 и заменить его регулярным выражением

0

Я пытаюсь дублировать форму и заменять значение 1 на 2, 3 и т.д. В зависимости от количества форм.

Вот мой html:

<div id="clonedInput1" class="clonedInput">

  <input id="show_upload_image_link_1" type="text" size="36" name="kandibox_theme_hero_options[show_upload_image_link_1]" value="<?php echo $hero_options['show_upload_image_link_1']; ?>" /> 
 <input id="show_upload_image_link_button_1" class="button upload_images" type="button" value="Upload Image" />

  <div class="actions">
      <button class="clone">Clone</button> 
      <button class="remove">Remove</button>
  </div>
</div>

Здесь мой запрос:

var regex = /^([0-9]+)$/;
var cloneIndex = $(".clonedInput").length;

$("button.clone").live("click", function(){
  $(this).parents(".clonedInput").clone()
    .appendTo("body")
    .attr("id", "clonedInput" +  cloneIndex)
    .find("*").each(function() {
        var id = this.id || "";
        var match = id.match(regex) || [];
        if (match.length == 3) {
            this.id = match[1] + (cloneIndex);
  }
});
cloneIndex++;
});

$("button.remove").live("click", function(){
  $(this).parents(".clonedInput").remove();
});

Пока он добавляет дополнительные формы, но он не заменит значение 1 в имени или значении.

Здесь скрипка http://jsfiddle.net/tfFLt/590/

  • 0
    ... а также? Пожалуйста, объясните, если вы получаете сообщение об ошибке (если да, то какое) или если результаты отличаются от ваших ожиданий (если да, то как).
  • 0
    Это отвечает на ваши вопросы? jsfiddle.net/tfFLt/601 . Похоже, что атрибут name по-прежнему неверен, но я думаю, что это просто.
Теги:

1 ответ

2
Лучший ответ

И окончательная версия с очисткой, чтобы избежать повторения кода:

$("button.clone").live("click", function(){
    var cloneIndex = $(".clonedInput").length + 1;
    var new_Input = $(this).parents(".clonedInput").clone();
    updateClonedInput(cloneIndex, new_Input);    
});

$("button.remove").live("click", function(){
    $(this).parents(".clonedInput").remove();

    $(".clonedInput").each( function (cloneIndex, clonedElement) {
        updateClonedInput(cloneIndex + 1, clonedElement);
    })
});

Для вычисления input идентификаторов и других свойств я вообще сбросил значение регулярного выражения. Я также изменил способ обработки нового ввода: сначала создаю newInput а затем обрабатываю его. Простой и понятный подход.

Когда вы удаляете один вход, поля input также будут перенумерованы на 1, 2, 3... Скрипка была обновлена, чтобы отразить это.

PS. Следите за тем, что если вы удалите первый вход, вы оставите без полей ввода или кнопку, чтобы добавить новый... :-) Решение: либо эта кнопка удаляется из формы ввода, либо вы ставите условие, чтобы не разрешать удаление если есть только один вход слева.

Надеюсь, поможет!

скрипка

  • 0
    Здесь вы только обновляете идентификатор HTML, но в своем коде он продолжает использовать cloneIndex, который никогда не обновляется.
  • 0
    Да. Я заметил, что. Работаю над этим. Но у моего кода также есть другая проблема. Если вы удалите раздел, следующий созданный может иметь повторяющиеся номера.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню