3

次のように、onclick イベントから edit という名前の関数を呼び出しています。

<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);

この関数は、$.each ループの外、$(document).ready 内で次のように定義されます。

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

[編集] ボタンをクリックすると、Chrome にエラーが表示されました: Uncaught ReferenceError: edit is not defined.

その他のエラーはありません。

4

2 に答える 2

1

機能(javascript)とレイアウト(HTML)を混在させることはお勧めできません。プロジェクトの範囲が大きくなるにつれて、開発エクスペリエンスは最適ではなくなります。次のように、jQueryを使用してその要素のクリックイベントにバインドすることをお勧めします。

$.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 ");
}

または、このスタイルでは、名前付き関数も必要ありません。

$('input[value="Edit"]').click( function() {
    alert("Id ");
});

ただし、名前付き関数を使用する場合はedit、イベントハンドラーがバインドされているのと同じスコープ内で(つまり、呼び出したときと同じスコープ内で.click(...))定義することが重要です。

于 2012-09-02T07:44:43.090 に答える
1

おそらくedit、グローバル スコープではない関数を定義しています。$.eachループだけでなく、外側などで定義する必要があります$(document).ready。たとえば、これは機能します:

<!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 でイベントをバインドすることをお勧めします。

$.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);
});
于 2012-09-02T07:48:46.417 に答える