“$”未定义; jquery明显与in;没有冲突的脚本或库

时间:2012-07-22 16:19:52

标签: javascript jquery dom firebug

- = - 这个代码功能。我没有意识到,因为没有功能/功能之间没有改变,因此存在问题。谢谢你的帮助(特别是Niko谁让球滚动并帮助我对jquery语法形成更丰富的理解) - = -

我手工编写了这个脚本,最后决定将其更新为jquery,以便习惯于此,并简化代码。这应该是一个简单的菜单(它之前做过)。

  • 两个.js文件都与.html文件位于同一目录中。这是在我的电脑上测试的,而不是在服务器上测试。
  • 此代码的先前版本完美地连接到taskMaster.js。那时我的代码没有使用“$”标记的电话。
  • 当尝试呼叫$(document).ready(function () {
  • 时,Firebug显示错误“ReferenceError:$ is not defined”
  • “net”选项卡不会显示.js文件被加载;网络标签是完全空的,没有显示任何活动 - 我相信这是因为我正在测试我的电脑;加载正常运行的代码时,网络面板为空
  • 我重新安装了一个新版本的jquery,因为有些东西出了问题,无济于事

破碎的代码“taskMaster.js”:

$(document).ready(function () {


//main menu
function Main()
{
    var mainList = ["New List","Show Lists","Delete Lists"];
    //var onClick = [New,Lists,Delete];
    var mainMenu = new Menu("Main Menu","menuMain",mainList/*,null*/);
    mainMenu.contentMenu();
}
$(Main);


//menu class
function Menu(name,divClass,content/*,onclick*/)
{
    $("#interface").html(null);

    //title
    formatDiv("interface",name,divClass,name/*,null*/);

    //return
    if(name != "Main Menu")
    {
        formatDiv(name,null,"return","^ Main Menu","Main()");
    }


    //display options
    this.contentMenu = function()
    {
        for(i=0; i<content.length; i++)
        {
            formatDiv("interface",content+i,"menuContent",content[i]/*,onclick[i]*/);
        }
    }
}


//format divs
function formatDiv(target,divId,divClass,content/*,onclick*/)
{
    $("#"+target).append("<div id=\'" + divId + "\' class=\'" + divClass + "\'>" + content +"</div>");
    /*$("#"+divId).click(function()
    {
        onclick;
    });*/
}

});

我注释掉了未使用的行,但它显示“$”为未定义的

这是HTML:

<html>
<head>
    <script type="text/javascript" src="jquery-1.7.2.min.js"></script>
    <script type="text/javascript" src="taskMaster.js"></script>
    <link rel="stylesheet" type="text/css" href="taskMaster.css" />
</head>
    <body>
        <div id="interface">
        </div>
    </body>
</html>

据我所知,这个html没有任何问题 - 之前的格式相同。所有改变的是我引入了jquery并更改了taskMaster.js中的一些命令以使用“$”。

1 个答案:

答案 0 :(得分:3)

好的,我现在将此作为答案发布,因为在这里提供一些示例更容易。

首先是:每当您执行访问DOM的操作(例如$("#interface").html(null);)时,您首先需要确保DOM已准备就绪。这就是“准备好”事件的目的:

$(document).ready(function() {
    /* The code here is executed when the DOM is ready! */
});

因此,如果“Main()”是一个关闭所有内容的函数,您可以简单地列出它以便在DOM准备就绪时调用:

function Main() {
    /* ... */
}

$(document).ready(Main);

大多数情况下,将整个JavaScript代码封装在“ready”事件处理程序中也是安全的:

$(document).ready(function() {
    function Main() { /* ... */ }
    function formatDiv(...) { }
    // ...

    // All functions are defined, now let's go:
    Main();
});

现在点击处理程序:jQuery的“click()”函数需要在单击相应的DOM元素时调用的函数。您当前正在向其传递“New()”等字符串,但您应该直接传递这些函数。为此,请以这种方式更改“Main()”中的代码:

// Old: var onClick = ["New()","Lists()","Delete()"];
var onClick = [New, Lists, Delete]; // New

这会将实际函数添加到数组中,而不仅仅是它们的名称。