(document).ready()中的javascript函数不执行

时间:2016-03-27 13:20:41

标签: javascript jquery

$(document).ready(function(){
    'use strict';
    console.log('main.js loaded');
		
    //showtable();
    function showtable() {
    console.log("We are in the showtable function in main.js");
    let people = [
        {name:"Mohinder", gender: "Male", Age: 57},
        {name:"Rekha", gender: "Female", Age: 58},
        {name:"Karan", gender: "Male", Age: 30},
        {name:"Angad", gender: "Male", Age: 20},
        {name:"Reba", gender: "Female", Age: 10}
    ];
    var theDiv = document.getElementById("people");

    var tableString = "";
    tableString += "<table border=1 id='peopleTable' >";
    tableString += "<tr class='hdr'><td>Name</td><td>Age</td></tr>";
    for (var x = 0; x < people.length; x += 1)
        tableString += "<tr><td>" + people[x].name + "</td><td>" + people[x].Age + "</td></tr>";
        tableString += "</table>";
        theDiv.innerHTML += tableString;
    };
 
    function frontAndCenter() {
         console.log("We are in the frontAndCenter function in main.js");
        var rtnval = '' ;
        var x = document.getElementsByTagName('table');
        if (x[0].className)
	        x[0].className = "raise";
        else
            x[0].className+="raise";
	    return rtnval;
    }
});
/* Styles go here */
.raise{
	box-shadow: 10px 10px 10px green ;
	margin: auto ;
}
#mainCanvas{
	width: 400px;
	height:400px;
	border: solid 1px black;
}
.hdr {
    background-color:cyan;
}
td {
    padding:10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!doctype html>
<html>
	<head>
        <title>Learning JS</title>
		<link rel="stylesheet" href="main.css">
        <script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
	</head>
	
	<body>
		<h1> My first application! </h1>
		<p id="people"></p>
        <button id='peopleBtn' onclick="showtable();">Show People Table</button>
        <button id='daBtn' onclick="frontAndCenter();">Click Me</button>
		<script src="main_funs.js"></script>
		<script src="main.js"></script>
		<script src="main2.js"></script>
	</body>
</html>

我是新手,所以请耐心等待。 我在学习JS的过程中编写了这个小应用程序。它包含一个函数,用于创建按钮单击调用的人名和年龄表。 然后还有另一个函数,它将一个类添加到表中,然后由有效的CSS修改(显示),这也可以通过单击另一个按钮来调用。 我已将所有JS放在封装在$(document).ready(){....}中的文件中 我注意到的是函数没有执行。 然后我将函数添加到另一个没有(document).ready(){....}的JS文件中,并且这些函数按预期执行。 我也尝试了同样的window.onload(){.....},他们也没有执行。 有人可以对此有所了解吗? 不确定我是否可以在这里附加文件,但代码粘贴在上面。按钮单击不起作用。但是,如果将函数复制到另一个文件并将其命名为main_funs.js,则代码将起作用。 抱歉,我尽力传达我遇到的问题,但如果不清楚请告诉我,我可以发给你代码文件。 感谢

main.html中

1 个答案:

答案 0 :(得分:3)

问题是因为您已在$(document).ready()处理程序中定义了函数,因此它们超出了on*事件属性的范围(它依赖于全局可用的函数)。

要解决此问题,您可以将您的功能移出$(document).ready()处理程序,或者更好的是,使用不显眼的Javascript来附加您的事件并将其全部保存在处理程序中。

由于您已经在使用jQuery,以下是如何执行此操作的示例:

<button id="peopleBtn">Show People Table</button>
<button id="daBtn">Click Me</button>
$(document).ready(function() {
    'use strict';

    $('#peopleBtn').click(function() {
        console.log("We are in the showtable function in main.js");
        let people = [{ /* your objects ... */ }];
        var $div = $("#people");
        var tableString = '<table border="1" id="peopleTable"><tr class="hdr"><td>Name</td><td>Age</td></tr>';    
        for (var x = 0; x < people.length; x += 1)
            tableString += '<tr><td>' + people[x].name + '</td><td>' + people[x].Age + '</td></tr>';
        tableString += '</table>';
        $("#people").html(tableString);
    });

    $('#daBtn').click(function() {
        console.log("We are in the frontAndCenter function in main.js");
        $('table:first').addClass('raise');
    })
});

请注意,我还使用了一些jQuery的方法来略微整理逻辑。