当我点击添加行按钮时,为什么在foo function
dos中追加选择值的值不会触发?
$(document).on("click", '.tdAdd', function () {
//alert($(this).closest('tr').index());
var newRow = $("<tr>");
var cols = "";
cols += '<td><input type="button" value="Add Row" class="tdAdd"/></td>';
cols += '<td><input type="button" value="Delete" class="tdAdd"/></td>';
cols += '<td><input type="text" /></td>';
cols += '<td><select class = "t">' + foo($(this).closest('tr').index() + 1) + '</select></td>';
newRow.append(cols);
newRow.insertAfter($(this).closest("tr"));
});
请参阅此FIDDLE了解演示。
function foo() {
var select = $('.t')
.append($("<option></option>")
.attr("value", 'one')
.text('One'));
select = $('.t')
.append($("<option></option>")
.attr("value", 'two')
.text('Two'));
}
答案 0 :(得分:1)
有几个问题,首先是foo()
并没有返回任何内容,因此您尝试将undefined
连接到字符串中。
接下来你在foo()
内所做的事情没有意义,因为$('.t')
是页面中每个元素与该类的集合。
以下将克隆第一个选择,将其值设置为null,然后返回要添加到字符串中的html
function foo(index) {
var $select = $('.t:first').clone().val('');
return $select.html(); // return the innerHtml of the select as string
}
的 DEMO 强>
要真正简化整个addRow,您可以克隆整行,重置表单控件的值并附加该克隆...所有这些都不需要任何新字符串
$(document).on("click", '.tdAdd', function () {
var $currentRow = $(this).closest('tr');
var $newRow = $currentRow.clone();
$newRow.find(':input').val('');
$currentRow.after($newRow);
})
答案 1 :(得分:1)
问题是,您正在尝试将选项添加到下一行当前&#39; tr&#39;这将始终是DOM中可用的下一行(最初在当前行旁边的那一行 - 橙行)。要在代码中添加选项,您必须首先将其添加到DOM,然后插入选项标记。
对代码的最小更改:
$(document).on("click", '.tdAdd', function () {
//alert($(this).closest('tr').index());
var newRow = $("<tr>");
var cols = "";
cols += '<td><input type="button" value="Add Row" class="tdAdd"/></td>';
cols += '<td><input type="button" value="Delete" class="tdAdd"/></td>';
cols += '<td><input type="text" /></td>';
cols += '<td><select class = "t"></select></td>';
newRow.append(cols);
newRow.insertAfter($(this).closest("tr"));
foo($(this).closest('tr').index() + 1);//add options once the newly created 'select' is available in DOM
});
答案 2 :(得分:1)
您正在追加JQuery对象。我已经提取了HTML并附加了它。 (see this answer):
function foo(index) {
var select = $("<option></option>")
.attr("value", 'one')
.text('One')
.prop('outerHTML');
return select;
}
我已更新更新的小提琴