2012-09-02 40 views
3

我正在從onclick事件調用名爲edit的函數,如下所示。Javascript錯誤:未捕獲ReferenceError:未定義編輯

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

的功能是在$。每個循環外定義,內部$(文件)。就緒,如下

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

當我點擊編輯按鈕,鉻所示錯誤:未捕獲的ReferenceError:編輯沒有定義。

沒有其他錯誤。

+0

是否有控制檯內的任何其他錯誤? –

+0

請嘗試在jsfiddle.net中重現錯誤請 –

+0

我明白了。 *劃傷下巴* –

回答

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

如果使用但是,在命名函數中,必須在事件處理程序綁定的相同範圍內(即在您調用.click(...)的相同範圍內)定義edit

相關問題