使用onClick生成的JavaScript JavaScript不会触发函数

时间:2011-07-19 05:36:31

标签: javascript function

下面的脚本在您单击链接时将项添加到数组,并生成项列表作为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>

1 个答案:

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

或者您希望获得该功能的任何方法。但是当它在匿名函数的作用域内声明时,你只能从对该作用域中的变量具有闭包的函数中访问它。