我有一个表格,允许我点击一个项目并更改值。为了针对旧版浏览器(IE8)进行优化,我改变了每次追加<td>
元素的表格,连接字符串然后一次追加项目。但是在我的新字符串附加中,附加函数不会被调用。
这是我工作的代码片段:
$('<td>', {
'text': value,
'class': 'editableCell',
'data-hd': currentCell.hd,
'data-cl': currentCell.cl,
'click': editFunction
}).appendTo(tr_body);
我将其更改为:
tableString += '<td class="selectable" data-hd="' + currentCell.hd+ '" data-cl="' + currentCell.cl+ '" onclick="editFunction()">' + value + '</td>';
现在当我点击元素时,我得到一个Uncaught ReferenceError: blurEdit is not defined
任何想法第一个click: editFunction
和第二个onclick='editFunction()'
之间的区别是什么?
功能是:
var editFunction= function () {
$(this).off();
var value = $(this).text();
var inp = $('<input>', {
'type': 'text',
'value': value,
'class': 'form-control',
'blur': blurEdit
});
$(this).html(inp);
inp.focus();
};
所以它已经到了这么远,然后使用未改变的blurEdit函数失败。
答案 0 :(得分:1)
任何想法第一次点击之间有什么区别:editFunction和第二次onclick =&#39; editFunction()&#39;?
One将对函数的引用(从当前作用域链)分配给事件处理程序。
另一个创建了一个新函数,它尝试在不同的作用域链中通过名称访问上述函数(内部事件处理程序作用域,类似于&#34; onclick函数本身,元素对象的属性,窗口&#34)。
回到第一种方法。它比通过粉碎字符串来创建HTML更清晰,更安全。