При добавлении в ячейки ошибка и не работает

#jquery

#jquery

Вопрос:

При первом открытии в сообщении отображается выбранное сообщение. новое сообщение не появляется, когда я нажимаю кнопку Добавления. В чем проблема

ДЕМОНСТРАЦИЯ

Выберите сообщение из списка с правой стороны — это ввод сообщения. добавить, что 2-й раз, когда я нажимаю, сообщение не приходит, когда я выбираю сообщение в списке

HTML

 <table class="color"  cellpadding="2" cellspacing="2" id="myTable">
    <tr class="user">
        <td >
            <select name="a" id="selectMe">
                <option value="" selected></option>
                <option value="1">Message</option>
                <option value="2">Not Message</option>
            </select>
        </td>

        <td id="group">
            Message</td>
    </tr>

    <tfoot>
        <tr>
            <td colspan="5" style="text-align: left;">
                <input type="button" id="addrow" value="Add Rows" />
            </td>
        </tr>

    </tfoot>
</table>
  

CSS

 <style>
#group {
    display: none;
    padding: 10px;
    border: 1px solid #ddd
}
</style>
  

JS

 $(document).ready(function () {
            var counter = 0;

            $("#addrow").on("click", function () {

                counter = $('#myTable tr').length - 2;

                var newRow = $("<tr>");
                var cols = "";

                cols  = '<td><select id="selectMe" name="a" ><option value="" ></option><option value="1" >Message</option><option value="2">Not Message </option></select></td><td id="group">mesage<</td>';

                cols  = '<td><input type="button"  value="x" ></td>';
                newRow.append(cols);
                if (counter == 4) $('#addrow').attr('disabled', true).prop('value', "You've reached the limit");
                $("table.color").append(newRow);
                counter  ;
            });




            $("table.color").on("click", ".buttons", function (event) {
                $(this).closest("tr").remove();
                calculateGrandTotal();

                counter -= 1
                $('#addrow').attr('disabled', false).prop('value', "Add Rows");
            });


        });




$('.user').each(function(){
    var parent = this,
        group = $('#group', parent);
    $('#selectMe', parent).on('change', function(){
        var indis = $(':selected', this).index();
        if ( indis > 0 ){
            indis -= 1;
            group.hide().filter(':eq('   indis   ')').fadeIn(300);
        } else {
            group.hide();
        }
    });
});
  

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

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

1. Все ваши строки дают один и тот же идентификатор selectMe меню. Идентификаторы должны быть уникальными.

2. Кроме того, все ваши селекторы перепутались

Ответ №1:

Вам нужно делегировать click событие и указать целевой тип ввода ( button ):

     $("table.color").on("click", "input[type='button']", function (event) {
        $(this).closest("tr").remove();
        calculateGrandTotal();

        counter -= 1
        $('#addrow').attr('disabled', false).prop('value', "Add Rows");
    });
  

ДЕМОНСТРАЦИЯ

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

1. спасибо, но не в этом проблема. Выберите сообщение из списка с правой стороны — это ввод сообщения. добавить, что 2-й раз, когда я нажимаю, сообщение не приходит, когда я выбираю сообщение в списке

2. Можете ли вы объяснить это более подробно? Я не уверен, что понимаю вас

3. смотрите демонстрацию> jsfiddle.net/ahmetsadri/9K3q6/1 1. меню списка> сообщение показать сообщение и добавить строки кнопка готова 2. меню списка> сообщение не показывать сообщение

Ответ №2:

Ваш $(".user").each() цикл работает только с элементами, которые присутствуют при первой загрузке страницы. DIVs, которые добавляются позже с помощью кнопки добавить, не обрабатываются, поэтому change обработчик никогда не добавляется.

Для реализации привязки событий к динамически добавляемым элементам необходимо использовать делегирование. Кроме того, вы не должны присваивать элементам одинаковые идентификаторы, вы должны использовать классы для похожих элементов. Так что измените id="selectMe" и id="group" на class="selectMe" и class="group" в HTML и измените CSS для использования .group . Затем обработчик щелчка становится:

 $('.color').on('change', '.selectMe', function () {
    var group = $(this).closest("td").siblings(".group");
    var indis = $(':selected', this).index();
    if (indis > 0) {
        indis -= 1;
        group.hide().filter(':eq('   indis   ')').fadeIn(300);
    } else {
        group.hide();
    }
});
  

ДЕМОНСТРАЦИЯ