下面的脚本在您单击链接时将项添加到数组,并生成项列表作为html输出。您可以在此处查看示例:http://jsfiddle.net/dqFpr/
我正在尝试创建一个从列表中删除项目的功能。使用splice()并不困难,但以某种方式点击删除链接不会触发test_function()
函数。
有人可以告诉我我做错了什么,或者告诉我另一种触发功能的方法吗?非常感谢您的帮助; - )
<script language="javascript">
$(document).ready(function() {
function test_function( number ) {
/* This function is not triggered, nothing works inside here!! */
}
});
var lines = [];
function update_list( lines ) {
var thecode = '';
for(var i = 0; i < lines.length; i++) {
thecode = thecode + lines[i] + ' <a onclick="javascript:test_function('+i+')" href="#">(delete)</a><br />';
}
$('div#display').html(thecode);
}
$('a#new').click(function() {
lines.push('another line');
update_list(lines);
});
</script>
<div id="display"></div>
<a href="#" id="new">Add a new line</a>
答案 0 :(得分:1)
因为在分配给 display 的innerHTML的文本中,* test_function *只是由HTML解析器评估的纯文本。那时,它的范围是全球性的,而不是传递给$(document).ready()
的IIFE。你可以通过使函数global:
$(document).ready(function(){
window.test_function = function (number) {
// do stuff
}
....
});
或
var test_function;
$(document).ready(function(){
test_function = function (number) {
// do stuff
}
....
});
或者您希望获得该功能的任何方法。但是当它在匿名函数的作用域内声明时,你只能从对该作用域中的变量具有闭包的函数中访问它。