2011-03-09 101 views
2

好吧,所以基本上我只是想做一个简单的函数,它将改变已被点击的div的CSS值。选定的div($(this))将被传递给divClicked函数。我可以在这里调用CSS jQuery函数,但我想在另一个函数中执行实现。jQuery功能参数

$('#container').children().click(function(){ 
    divClicked($(this)); 
}); 

但在divClicked函数,当我去div变量上运行jQuery函数它不工作......任何想法我做错了什么。

function divClicked(selectedDiv) 
{ 
    $(selectedDiv).css('background', 'red'); 
} 
+1

我想你想使用'委托',如果我正确地理解你的问题。目前'this' does not *参考'#容器' – zzzzBov 2011-03-09 18:12:18

+1

zzzzBov:'this'指的是点击的div ...我认为他明白了吗? – 2011-03-09 18:16:23

+0

你可以发布你的代码吗?我可以[让这个工作](http://jsfiddle.net/8pgBv/)与我有的设置。 – justkt 2011-03-09 18:17:29

回答

1

您的代码应该工作。见this。你的HTML中有什么我们不知道的东西?

但就像一个笔记,当你通过$(this)时,你已经传递了一个jQuery对象。然后再将它作为jQuery对象包装起来。请使用selectedDiv。或者,通过this并使用$(selectedDiv)

+0

然而,它应该工作。 jQuery足够聪明地弄清楚了。 – 2011-03-09 18:12:09

+0

我同意,请参阅我的答案... – 2011-03-09 18:14:30

+0

@T。 J. - hm ...是...看到[fiddle](http://jsfiddle.net/8pgBv/)。如上所述,我编辑了我的回复。 – justkt 2011-03-09 18:17:13

2

你在哪里做连接?如果它位于实际“容器”div上方的script标签中,并且您没有将其包装在某种ready回调或类似内容中,则可能是问题所在。或者,如果您之后将孩子添加到了div中(因为您使用的是click,因此只会将处理程序与那里的孩子挂钩)。

因为如果 “容器” div及其子已经存在,你的代码工作:

HTML:

<div id='container'> 
    <div>Child 1</div> 
    <div>Child 2</div> 
    <div>Child 3</div> 
</div> 
<input type='button' id='btnAdd' value='Add a new child'> 

的JavaScript:

$('#btnAdd').click(function() { 
    $("#container").append("<div>New child, clicking me <em>won't</em> work</div>"); 
}); 

$('#container').children().click(function(){ 
    divClicked($(this)); 
}); 

function divClicked(selectedDiv) 
{ 
    // You don't want `$` here, but I've left it just to demonstrate 
    // that your code should, largely, be working 
    $(selectedDiv).css('background', 'red'); 
} 

Live copy

..但请注意,此后添加的元素为不要工作,因为当你把事情搞砸时,他们不在那里。

解决它将取决于什么是错的。它可能只是将您的连接代码包装到ready处理程序中(如我在该示例中那样)或将其移动到页面底部的script标记中编码,即在关闭</body>标记(如YUI folks recommend)之前,或者可能使用livedelegate

0

我认为这将反正工作是什么“justkt”建议..

你尝试“背景色”为你的CSS样式!?

+0

我想有*可能是一个浏览器,在那个阶段不接受速记属性。 (IE6,IE7,IE8,Chrome 9 [Win和Ubuntu],Firefox 3.6 [Win和Ubuntu],Opera 11 [Win和Ubuntu]和Safari 5 [Win]都无法找到*都完全满足于此),但确实具体是合理的。 – 2011-03-09 18:29:00

0

使用此jquery代码以避免错误。所以它不可用的现场活动

$(document).ready(function(e) { 
$('#btnAdd').click(function() { 
    $("#container").append("<div>New child, clicking me <em>won't</em> work</div>"); 
}); 

$(document).delegate('#container div', "click", function(){divClicked(this);}); 

var divClicked=function(selectedDiv) { 
    $(selectedDiv).css('background', 'red'); 
}; 

});

<div id='container'> 
    <div class="1">Child 1</div> 
    <div class="2">Child 2</div> 
    <div class="3">Child 3</div> 
</div> 
<input type='button' id='btnAdd' value='Add a new child'>