动态行文件名到文本框
Dynamic row file name into textbox
使用 jquery 和 bootstrap-jasny 我创建了一个动态行插入:
html:
<table id="internalTbl">
<tr><td><div class="fileinput fileinput-new" data-provides="fileinput"> <span class="btn btn-default btn-file"><span class="fileinput-new">Select file</span><span class="fileinput-exists">Change</span>
<input type="file" name="name">
</span> <span class="fileinput-filename"></span>
<a href="#" class="close fileinput-exists" data-dismiss="fileinput" style="float: none">×</a>
<input type="text" name="namehidden" />
</td></tr>
</table>
<button id="addInternal"> add </button>
javascript:
// add new row to internal listing table
$("#addInternal").click(function() {
$("#internalTbl").each(function () {
var tds = '<tr>';
$.each($('tr:last td', this), function () {
tds += '<td>' + $(this).html() + '</td>';
});
tds += '</tr>';
if ($('tbody', this).length > 0) {
$('tbody', this).append(tds);
} else {
$(this).append(tds);
}
});
// clear the last file input field
$("#internalTbl tr:last .fileinput").fileinput('clear');
});
对于后续,我无法将文件名分配给文本框。
您需要为动态添加的文件输入委托更改事件。 More on delegate。下面的代码将使用 class .fileinput
将更改事件附加到未来的元素上
$(document).on('change.bs.fileinput', '.fileinput', function (e) {
var filename = $(this).closest('tr').find('.fileinput-filename').text();
$(this).closest('tr').find('input[type="text"]').val(filename);
});
我还使用了两种追加方法,一种是点击手动创建 trs 和 tds,另一种是 clones 第一个 tr 并追加到 table。你可以使用任何一个。
var fileinput = $('#internalTbl tr td:eq(0)').html();
var td = '<td>'+fileinput+'</td>';
var tr ='<tr>'+ td+'</tr>';
$("#addInternal").click(function () {
$("#internalTbl tbody").append(tr);
$("#internalTbl tr:last .fileinput").fileinput('clear');
});
$("#addInternal2").click(function () {
var cloned_elem = $('#internalTbl tr:first').clone();
$("#internalTbl tbody").append(cloned_elem);
$("#internalTbl tr:last .fileinput").fileinput('clear');
});
使用 jquery 和 bootstrap-jasny 我创建了一个动态行插入:
html:
<table id="internalTbl">
<tr><td><div class="fileinput fileinput-new" data-provides="fileinput"> <span class="btn btn-default btn-file"><span class="fileinput-new">Select file</span><span class="fileinput-exists">Change</span>
<input type="file" name="name">
</span> <span class="fileinput-filename"></span>
<a href="#" class="close fileinput-exists" data-dismiss="fileinput" style="float: none">×</a>
<input type="text" name="namehidden" />
</td></tr>
</table>
<button id="addInternal"> add </button>
javascript:
// add new row to internal listing table
$("#addInternal").click(function() {
$("#internalTbl").each(function () {
var tds = '<tr>';
$.each($('tr:last td', this), function () {
tds += '<td>' + $(this).html() + '</td>';
});
tds += '</tr>';
if ($('tbody', this).length > 0) {
$('tbody', this).append(tds);
} else {
$(this).append(tds);
}
});
// clear the last file input field
$("#internalTbl tr:last .fileinput").fileinput('clear');
});
对于后续,我无法将文件名分配给文本框。
您需要为动态添加的文件输入委托更改事件。 More on delegate。下面的代码将使用 class .fileinput
$(document).on('change.bs.fileinput', '.fileinput', function (e) {
var filename = $(this).closest('tr').find('.fileinput-filename').text();
$(this).closest('tr').find('input[type="text"]').val(filename);
});
我还使用了两种追加方法,一种是点击手动创建 trs 和 tds,另一种是 clones 第一个 tr 并追加到 table。你可以使用任何一个。
var fileinput = $('#internalTbl tr td:eq(0)').html();
var td = '<td>'+fileinput+'</td>';
var tr ='<tr>'+ td+'</tr>';
$("#addInternal").click(function () {
$("#internalTbl tbody").append(tr);
$("#internalTbl tr:last .fileinput").fileinput('clear');
});
$("#addInternal2").click(function () {
var cloned_elem = $('#internalTbl tr:first').clone();
$("#internalTbl tbody").append(cloned_elem);
$("#internalTbl tr:last .fileinput").fileinput('clear');
});