我花了2个小时,今天上午试图找出为什么我的jQuery函数在页面的一部分工作,但不是另一部分。填充中断jQuery选择器?
我终于把它缩小到容器上的垂直填充。
如果我有这个在我的CSS:
div.collapsiblePanel {
padding: 0px 1%;
}
然后,通过jQuery,我能找到的父(.collapsiblePanel)元素,可以穿越到该分区和操纵子元素。但是,如果我在样式表改变只是这样一件事到此:
div.collapsiblePanel {
padding: 5px 1%;
}
然后jQuery的可以寻父(.collapsiblePanel),但是无法遍历孩子。
疯了吧?关于发生什么事的任何理论?我在这个问题上抨击了我的想法,认为它应该是我的jQuery,但最终还是CSS问题。
根据要求的标记/ CSS /代码一些片段:
具体jQuery的功能,这不是(貌似)工作:
function finishUp(ajaxContainer,originalContainer,loadingAlert) {
$(ajaxContainer).find("input.btnSave").css("border","3px solid red");
var saveButtonn = $(ajaxContainer).find("input.btnSave");
console.log(ajaxContainer);
console.log(originalContainer);
console.log(loadingAlert);
console.log(saveButton);
$(ajaxContainer).find("input.btnSave").css("border","3px solid red").click(function(){
alert("you clicked the save button");
savePanel($(this));
});
};
那是什么做的是,前面的函数加载后通过AJAX的内容,然后显示容器,这个函数进来,并附加一个点击事件的按钮。
正如你可以看到我有一堆额外的日志代码在那里。当我的CSS垂直填充设置为'0'时,Firebug会记录每个对象的正确名称。当我将CSS垂直填充更改为其他任何内容时,最后一个对象(saveButton)在Firebug中返回为空/空白。
的HTML:
<div class="ajaxEditPanel editablePanel collapsiblePanel" style="display: block;">
<form>
<fieldset class="sideLabels dividers">
<legend>Edit Realtionship Information</legend>
...the form...
<div class="formItem formButtons"
<input value="save" class="button btnSave" type="button">
<input value="cancel" class="button btnCancel" type="button">
</div>
</fieldset>
</form>
</div>
注意正由以前的jQuery函数创建的DIV和加载内容。起初,我认为这是一个计时问题,我试图将一个事件附加到尚未加载到DOM中的对象。然而,这并没有解释为什么在页面的其他地方使用相同的确切功能。我可以改变的那个变量会使这个工作或不工作最终成为那个CSS填充位。如果在功能当前工作的那部分页面中,我还为容器添加了一些垂直填充,他们也会打破jQuery选择子元素。
如果你把一个显示这两种情况下演示,我保证会有人告诉你,你在做什么错,还是正确的。 – mkoryak 2009-10-29 17:01:42
这似乎不太可能......你如何穿越孩子? – 2009-10-29 17:02:49
如果您也可以发布有问题的HTML片段,它可能会有所帮助。 – 2009-10-29 17:04:25