DOM манипулирование при изменении значения триггера

Каков наилучший способ сделать этот случай манипуляции:

Когда изменяется триггер, использующий поле со списком, я хочу изменить тип textField, который был ранее добавлен в форму.

Мой пример сбора данных:

function DataProvide(){
    selectValues = { 
        "choose"        : "-Choose-",
        "id"            : "ID",
        "emp_name"      : "Employee Name",
        "photo_path"    : "Photo Path",
        "emp_id"        : "Employee ID",
        "start_date"    : "Start Date",
        "birth_date"    : "Birth Date"
    };

    $.each(selectValues, function(key, value) {   
         $('#data1_1')
             .append($("<option></option>")
             .attr("value",key)
             .text(value)); 
    }); 
}

$(document).ready(function() {
     DataProvide();
});

Данные были отображены в выпадающем списке.

Затем я добавляю поле в форму, используя $.append()

var count = 1;
$(".addCF").click(function(){
    count += 1;
    var $row = $('<tr>' 
    + '<td>' + '</td>'
    + '<td>' + '<input id="data2_' + count + '" type="text" name="data2[]" class="data2" value="" placeholder=""/>' + '</td>' 
    + '<td>' + '<input id="data3_' + count + '" type="text" name="data3[]" class="data3" value="" placeholder=""/>' + '</td>' 
    + '<td>' + '<a href="javascript:void(0);" class="remCF">Remove</a>' + '</td>' 
    + '</tr>').appendTo("#customFields");
    $row.find('td:first').append($('#data1_1').clone())
});

    $("#customFields").on('click','.remCF',function(){
        $(this).parent().parent().remove();
        count -= 1;
    }); 

Посмотреть

До этого момента я был настолько успешен, насколько хотел.

Но я хочу сделать небольшое изменение в 3-й колонке. Как лучше всего манипулировать этой формой, когда триггер (поле со списком), который я выбираю, например, "start_date", затем поле будет изменено, чтобы использовать класс "onlyDate", который я добавляю jQuery UI для отображения параметров даты.

Я добавил:

$(".onlyDate").datepicker({
    dateFormat: "dd-mm-yy"
});

Затем, чтобы проверить значение комбо$("#customFields"). On('change', '.tabelBaru', function() {

if(nilai=='gender'){
            $this.closest("tr").find(".data3").replaceWith(
                '<select name="data3[]" class="data3">'
                    + '<option value="man" selected >Man</option>'
                    + '<option value="woman">Woman</option>'
                + '</select>'
            )
        }else if(nilai=='start_date'){
            $this.closest("tr").find(".data3").replaceWith(
                '<input type="text" name="data3[]" value="" class="onlyDate"/>'
            )
        }
};

Но jQueryUI datepicker не появляется как обычно. Но если в нормальной форме (без использования $.append) все работает нормально.

Как мне это исправить?

1 ответ

$(".onlyDate").datepicker({
    dateFormat: "dd-mm-yy"
});

Когда этот код выполняется, он обнаружит только объект этого оператора с именем класса onlyDate.

После этого любой объект с именем класса onlyDate, добавляемый на страницу, не будет выполнять код datepick.

Возможно, вам следует попробовать функцию jquery "делегировать" или выполнить код datepicker после каждого добавления.

Другие вопросы по тегам