2016-02-02 5 views
0

Я новичок в jQuery и JS. Поэтому у меня есть эта задача, чтобы создать строку с вкладками, используя форму диалога. В каждой строке последняя ячейка должна содержать кнопку. Мой вопрос: как я могу добавить id для этой конкретной кнопки. Я попытался выбрать кнопку и добавить .attr ('id', 'delete'), но это изменяет идентификатор кнопки, которая открывает диалог.Добавление id к определенной кнопке с помощью jQuery

Как я могу добавить идентификатор только к вновь созданной кнопке?

< script type = "text/javascript" > 
 

 
    function validateForm(form) { 
 
    var errors = []; 
 
    $(form.elements).each(function() { 
 
     var $this = $(this); 
 
     if (!$this.val()) { 
 
     var msg = $this.prev().html() + ' е задължително поле'; 
 
     errors.push(msg); 
 
     } 
 
    }); 
 

 
    return errors; 
 
    } 
 

 
function saveForm(form) { 
 

 
    var nextNumber = $('table tr').length; 
 
    var rowTpl = '<tr>' + 
 
    '<td>' + nextNumber + '</td>' + 
 
    '<td>' + $('#brand', form).val() + '</td>' + 
 
    '<td>' + $('#model', form).val() + '</td>' + 
 
    '<td>' + $('#year', form).val() + '</td>' + 
 
    '<td>' + $('#kms', form).val() + '</td>' + 
 
    '<td>' + '<button>' + '<span>' + 'Delete' + '</span>' + '</button>' + '</td>' + 
 
    '</tr>'; 
 

 
    $('table').append(rowTpl); 
 
} 
 

 
$(function() { 
 
    $('#add-btn').button({ 
 
    icons: { 
 
     primary: 'ui-icon-circle-plus' 
 
    } 
 
    }).on('click', function() { 
 
    $('#form-container').dialog('open') 
 
    }); 
 

 
    $('#form-container').dialog({ 
 
    autoOpen: false, 
 
    modal: true, 
 
    buttons: [{ 
 
     text: 'Save', 
 
     click: function() { 
 
     var form = $(this).find('form').get(0); 
 
     var errors = validateForm(form); 
 

 
     if (errors.length) { 
 
      return alert(errors.join("\n")); 
 
     } 
 

 
     saveForm(form); 
 
     form.reset(); 
 
     $(this).dialog('close'); 
 
     } 
 
    }, { 
 
     text: 'Close', 
 
     click: function() { 
 
     $(this).find('form').get(0).reset(); 
 
     $(this).dialog('close'); 
 
     } 
 
    }] 
 
    }); 
 
}) 
 

 
$('#delete').button({}); 
 

 
$("#delete").click(function() { 
 
    $(this).parents('tr').first().remove(); 
 
}); 
 

 
< /script>
<style type="text/css"> table { 
 
    border-collapse: collapse; 
 
} 
 
th { 
 
    padding: 0.2em; 
 
} 
 
td { 
 
    margin: 0.2em; 
 
    padding: 0.2em; 
 
    text-align: center; 
 
    border: 1px solid grey; 
 
} 
 
.ui-widget-header, 
 
.ui-widget-content { 
 
    padding: 0.8em; 
 
} 
 
.float-left { 
 
    float: left; 
 
} 
 
.float-right { 
 
    float: right; 
 
} 
 
</style>
<div id="container" class="ui-widget"> 
 
    <div class="ui-widget-header ui-helper-clearfix"> 
 
    <h3 class="float-left">ALL CARS</h3> 
 
    <button class="float-right" id="add-btn"> 
 
     <span>Add New Address</span> 
 
    </button> 
 
    </div> 
 
    <div class="ui-widget-content"> 
 
    <table width="100%"> 
 
     <tr> 
 
     <th>#</th> 
 
     <th>Марка</th> 
 
     <th>Модел</th> 
 
     <th>Година</th> 
 
     <th>Километри</th> 
 
     <th>Премахни</th> 
 
     </tr> 
 
     <tr> 
 
     <td>1</td> 
 
     <td>BMW</td> 
 
     <td>i8</td> 
 
     <td>2015</td> 
 
     <td>10 000</td> 
 
     <td> 
 
      <button class="float-center" id="delete"> 
 
      <span>Delete</span> 
 
      </button> 
 
     </td> 
 
     </tr> 
 
    </table> 
 

 
    </div> 
 

 
    <div id="form-container" title="Add new car"> 
 
    <form action=""> 
 
     <div> 
 
     <label for="brand">Марка</label> 
 
     <input type="text" id="brand" /> 
 
     </div> 
 
     <div> 
 
     <label for="model">Модел</label> 
 
     <input type="text" id="model" /> 
 
     </div> 
 
     <div> 
 
     <label for="year">Година</label> 
 
     <input type="number" id="year" /> 
 
     </div> 
 
     <div> 
 
     <label for="kms">Километри</label> 
 
     <input type="number" id="kms" /> 
 
     </div> 
 
    </form> 
 
    </div> 
 
</div>

Спасибо!

+0

''' + '

+0

Имейте в виду, что значения' id' должны быть уникальными , – Jasen

+0

Да, я полностью забыл об этом, пытаясь решить мою проблему! Спасибо вам всем! Я добавил не id, а класс, и, похоже, он работает! –

ответ

1

идентификаторами являются особыми, так что вы не должны быть настройки тот же идентификатор на несколько элементов. Во-вторых, onclick, который вы добавляете с этим идентификатором, не будет прикреплен к кнопке, которую вы создаете после запуска этого кода. Так же, как если бы телефон звонил, а вас там нет, вы не ответите на него.

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

//attach the click handler to the table and listen for a click on a button 
$("table").on("click", "button", function() { 
    var button = $(this); //The button that was clicked 
    var row = button.closest("tr"); //The row the button is in. 
    row.remove(); //delete the row 
}); 
2

Добавить id на кнопку в вашей rowTpl переменной, как показано ниже.

var rowTpl = '<tr>' + 
'<td>' + nextNumber + '</td>' + 
'<td>' + $('#brand', form).val() + '</td>' + 
'<td>' + $('#model', form).val() + '</td>' + 
'<td>' + $('#year', form).val() + '</td>' + 
'<td>' + $('#kms', form).val() + '</td>' + 
'<td>' + '<button id="delete'+nextNumber+'">' + '<span>' + 'Delete' + '</span>' + '</button>' + '</td>' + 
'</tr>'; 

кнопку id Это добавит в delete1, delete2, delete3,......

0

id должен быть уникальным во всем документе, поэтому установка id к " delete "для всех этих кнопок неверно. Вы можете установить класс. Когда вы его создаете, вы можете просто создать его как <button class='delete'>, а затем использовать $(".delete"), чтобы найти все кнопки.

Вы также можете установить действие непосредственно в коде:

var rowTpl = '<tr>' + 
    '<td>' + nextNumber + '</td>' + 
    '<td>' + $('#brand', form).val() + '</td>' + 
    '<td>' + $('#model', form).val() + '</td>' + 
    '<td>' + $('#year', form).val() + '</td>' + 
    '<td>' + $('#kms', form).val() + '</td>' + 
    '<td>' + '<button onclick="$(this).closest(\'tr\').remove();">' + '<span>' + 'Delete' + '</span>' + '</button>' + 
    '</td>' + 
    '</tr>'; 
0

Да я забыл суммарно об этом, пытаясь решить мою проблему, я добавил не идентификатор, но класс и это, кажется, работает! СПАСИБО ВАМ ВСЕМ! :)

Смежные вопросы