动态创建的模态不起作用

时间:2017-03-27 06:46:09

标签: javascript jquery onclick bootstrap-modal

我有一个表单,其中使用add more创建了下一个字段和链接。第一行完美地显示模态窗口,但动态创建的链接不显示模态。动态行创建如下:

$row += '<tr>';

$row += '<td width="20%">';
$row += '<a href="javascript:void(0)" id="showModal'+sl_no+'"> Add Documents/Req. </a>';
$row += '</td>';

$row += '<div class="modal fade" id="modal'+sl_no+'" tabindex="-1" role="dialog">';
$row += '<div class="modal-dialog" role="document">';
$row += '<div class="modal-content">';
$row += '<div class="modal-header">';
$row += '<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>';
$row += '<h4 class="modal-title">Modal title</h4>';
$row += '</div>';
$row += '<div class="modal-body">';
$row += '<p>One fine body&hellip;</p>';
$row += '</div>';
$row += '<div class="modal-footer">';
$row += '<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>';
$row += '<button type="button" class="btn btn-primary">Save changes</button>';
$row += '</div>';
$row += '</div>';
$row += '</div>';
$row += '</div>';

这就是:

$last_tr = $('#indent_item_list tr:last');
$last_tr.after($new_row);

$('#showModal'+sl_no).on('click', function() { alert('fff');
  $('#modal'+sl_no).modal('show');
});

但是当我点击Add Documents/Req时它没有显示模态!怎么解决这个问题?

FIDDLE HERE

4 个答案:

答案 0 :(得分:1)

在tr中添加div元素不是一个好习惯

你可以做这样的事情

QMainWindow::restoreState

HTML: -

<div class="modals-container">
    <div class="modal fade" id="modal1" tabindex="-1" role="dialog">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                    <h4 class="modal-title">Modal title</h4>
                </div>
                <div class="modal-body">
                    <p>One fine body&hellip;</p>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                    <button type="button" class="btn btn-primary">Save changes</button>
                </div>
            </div><!-- /.modal-content -->
        </div><!-- /.modal-dialog -->
    </div><!-- /.modal -->
</div>

<table class="table" id="indent_item_list">
<tr>
    <th>LINK</th>
</tr>
<tr>
    <td>
        <a href="javascript:void(0)" id="showModal1"> Add Documents/Req. </a> 
    </td>

</tr>
</table>

<a href="javascript:void(0)" class="btn btn-warning add_more_item btn-sm">Add More Item

Javascript

var sl_no = 1;
$('#showModal1').click(function() {
    $('#modal1').modal('show');  
});

$('.add_more_item').click(function(e) {

    sl_no++;
    $new_row = generateARow(sl_no);
    $last_tr = $('#indent_item_list tr:last');

    //$(".select2").select2("destroy");
    $last_tr.after($new_row);

    $('#showModal'+sl_no).on('click', function() {
        $('#modal'+sl_no).modal('show');
    });

    item++;
});

function generateARow(sl_no) {
$row = '';
$modal = '';
$row += '<tr>';

$row += '<td width="20%">';
$row += '<a href="javascript:void(0)" id="showModal'+sl_no+'"> Add Documents/Req. </a>';
$row += '</td>';

$row += '</tr>';



$modal += '<div class="modal fade" id="modal'+sl_no+'" tabindex="-1" role="dialog">';
$modal += '<div class="modal-dialog" role="document">';
$modal += '<div class="modal-content">';
$modal += '<div class="modal-header">';
$modal += '<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>';
$modal += '<h4 class="modal-title">Modal title</h4>';
$modal += '</div>';
$modal += '<div class="modal-body">';
$modal += '<p>One fine body&hellip;</p>';
$modal += '</div>';
$modal += '<div class="modal-footer">';
$modal += '<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>';
$modal += '<button type="button" class="btn btn-primary">Save changes</button>';
$modal += '</div>';
$modal += '</div>';
$modal += '</div>';
$modal += '</div>';
$(".modals-container").append($modal);
    return $row;
}

答案 1 :(得分:1)

代码中的一些问题:

1)您正在尝试在表元素中追加div。哪个不行。您需要在td中追加div元素,或者为modal设置一个单独的容器。

2)此外,您不需要在追加每行后附加点击事件。您需要使用静态父元素进行事件委派。在当前情况下哪个是表元素。与is一起开始使用属性来定位以id showModal开头的所有行元素:

$('#indent_item_list').on('click','[id^=showModal]', function() {
  $('#modal'+this.id.replace('showModal','')).modal('show');
});

<强> Working Demo

答案 2 :(得分:1)

你的守则没问题。 你遇到的问题是你的模态被添加到一个表中。哪个不适用于bootstrap。

检查你是否可以将模态放在桌子之外,一切都应该可以正常工作。

问候

答案 3 :(得分:0)

替换你的小提琴代码

$('#showModal1').click(function() {

到新代码

$(document).on('click', '[id^=showModal]', function() {