在页面加载时调用的函数,而只能在onclick上调用它

时间:2015-03-30 07:54:26

标签: javascript jquery ajax

在这里,我想点击“更新”按钮调用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>";  
 });

2 个答案:

答案 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'));
});