首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript错误:未捕获ReferenceError:未定义编辑

Javascript错误:未捕获ReferenceError:未定义编辑
EN

Stack Overflow用户
提问于 2012-09-02 15:36:47
回答 2查看 10.2K关注 0票数 3

我从onclick事件调用一个名为edit的函数,如下所示。

代码语言:javascript
复制
<script type="text/javascript">
  $(document).ready(function () {
    ...

    $.each(data, function (key, val) {
      ...

      var td11 = $('<input type="button" value="Edit" onclick="edit();" />')
        .attr("name",val.Id);

      $(tr2).append(td11);
      $(table1).append(tr2);
    });

    $("#cers").append(table1);

该函数在$(document).ready内的$.each循环外部定义,如下所示

代码语言:javascript
复制
function edit() {
  alert("Id ");
}

当我点击编辑按钮时,Chrome显示错误:未捕获ReferenceError:未定义编辑。

没有其他错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-02 15:48:46

您可能定义了不在全局作用域中的edit函数。它不仅应该在$.each循环之外定义,而且应该在$(document).ready等外部定义。例如,这是可行的:

代码语言:javascript
复制
<!doctype html>

<html>
  <head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>

    <script type="text/javascript">
      function func () {
        alert('func');
      }

      $(document).ready(function () {
        $('<a href="#" onClick="func();">link</a>').appendTo('#container');
      });
    </script>
  </head>

  <body>
    <div id="container"></div>
  </body>
</html>

但在你的例子中,最好是在javascript中绑定事件:

代码语言:javascript
复制
$.each(data, function (key, val) {
  // ... some code
  var td11 = $('<input type="button" value="Edit">')
    .click(edit)
    .attr('name', val.Id);

  $(tr2).append(td11);
  $(table1).append(tr2);
});
票数 1
EN

Stack Overflow用户

发布于 2012-09-02 15:44:43

不推荐将功能(javascript)与布局(HTML)混合在一起,随着项目范围的扩大,这会带来不太理想的开发体验。最好使用jQuery绑定到该元素上的单击事件,如下所示:

代码语言:javascript
复制
$.each(data, function (key, val) {
    /* . . . */
    var td11 = $('<input type="button" value="Edit" />').attr("name",val.Id);
    $(tr2).append(td11);
    $(table1).append(tr2);
});
$("#cers").append(table1);

$('input[value="Edit"]').click( edit );

function edit() {
    alert("Id ");
}

或者,使用这种风格,您甚至不需要命名函数:

代码语言:javascript
复制
$('input[value="Edit"]').click( function() {
    alert("Id ");
});

但是,如果使用命名函数,重要的是要在绑定事件处理程序的同一范围内定义edit (即,在调用.click(...)的同一范围内)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12234193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档