在这里,我想点击“更新”按钮调用updateRecord("+n+")
功能
这里res.data
是来自ajax的回复。但是当页面加载updareRecord
时自己调用。以下代码是用js文件编写的。并点击获取以下错误:
Uncaught SyntaxError:意外的标识符。
如果您不理解任何问题,我请求提及确切的观点,而不是将其标记为否定。
$.map(res.data,function(n,i){
if (n['type'] == 1)
html += "<tr><td>"
+ n['locationName']
+ "</td><td>"
+ n['categoryName']
+ "</td><td>"
+ n['day']
+ "</td><td>"
+ n['status']
+ "</td><td><input type='button' onclick = '"+updateRecord(n)+ "' value='Update'/></td></tr>";
});
答案 0 :(得分:0)
因为在调用回调函数时已经调用了该函数。 这就发生在这一行:
+ "</td><td><input type='button' onclick = '"+updateRecord(n)+ "' value='Update'/></td></tr>";
首先调用updateRecord(n),然后将返回值附加到文本中。
我会避免直接向DOM添加事件,而是使用类似这样的东西:
var button = $('<input type="button" value="Update" />');
button.click(function(event) {
updateRecord(n);
}
答案 1 :(得分:0)
问题是,你调用方法:
html += "<input type='button' onclick = '"+updateRecord(n)+"' ...";
/* like this you execute the method directly,
like any other function call in javascript */
如果你这样写:
html += "<input type='button' onclick = 'updateRecord("+n+")'...";
/* like this it is a string, and will be
interpreted by the javascript click eventhandler
after adding the html string to the DOM */
它可以按预期工作,但问题是,您要将数组/对象设置为参数,这将导致javascript错误。为了避免这种情况,你也可以这样做:
$.map(res.data,function(n,i){
if (n['type'] == 1) {
html += "<tr><td>" + n['locationName'] + "</td><td>" +
n['categoryName'] + "</td><td>" + n['day'] + "</td><td>" +
n['status'] + "</td><td>" +
"<input class='update-button' data-value='"+
/* since n is an associative array, will need
to stringify in a special way */
JSON.stringify(n).replace(/'/g, "\\'")
+"' type='button' value='Update'/></td></tr>";
}
});
/* bind an click event to all .update-button elements,
whenever these elements will be appended to the DOM */
$(document).on('click','.update-button',function() {
updateRecord($(this).data('value'));
});