2011-12-27 62 views
0

我有以下代码:jQuery的依赖

function drawDimensions(divid) { 
    // This function gets a JSON file, loops through the JSON code using $.each and fills the divid with parsed JSON content 
} 

在另一方面,我有2个功能,可以让我用$.toggle()切换菜单和子菜单。

我应该在$(document).ready(function() { });下加载什么?

目前,我正在加载drawDimensions 下的切换功能,但切换不起作用。我需要在文档就绪功能中以特定顺序加载它们吗?有关系吗?

注意:如果禁用drawDimensions并简单地将输出html附加到代码,则切换函数可以工作。

+0

如果其有效的JSON字符串,为什么你通过它循环,而不是它和利用的属性只是“对象fying”? https://github.com/douglascrockford/JSON-js – 2011-12-27 22:29:44

回答

0

将代码放入$(document).ready()闭包中,以确保在运行任何JavaScript之前完全解析DOM。

这听起来像是在向DOM动态添加HTML,在这种情况下,您必须在添加HTML后对该HTML执行“工作”,或者使用事件委托将事件绑定到稍后添加到DOM的元素:

$(document).on('click', '.dim', function (event) { 
    event.stopPropagation(); 
    $(this).children('.hidden').toggle(); 
}); 

$(document).on('click', '.parent', function() { 
    $(this).children('.dim').toggle(); 
}); 

$(document).on('click', '.hidden', function (event) { 
    event.stopPropagation(); 
}); 

这里是一个演示:http://jsfiddle.net/76uTr/2/(注:使用“添加菜单”链接动态地添加另一个菜单看到该事件绑定动态添加到DOM元素工作)

代替将事件处理程序直接绑定到元素,这将允许您为要添加的元素设置事件处理程序未来的DOM。

请注意,.on()是jQuery 1.7中的新增功能,在这种情况下与.delegate()相同(语法有点不同,但您可以在文档中看到)。

我今天早些时候一把抓起我的回答验证码你的问题:jQuery toggle children of div

+0

谢谢你,完美的作品。 – 2011-12-27 22:50:56

0

$(document).ready()只是运行时的所有页面上的元素都有被渲染。这是一种确保对DOM的修改和操作成功处理的不可靠方法。

这应该工作,太:

$("#element").toggle(myFunction($(this)), myOtherFunction($(this)));