【发布时间】:2011-08-31 08:19:34
【问题描述】:
我不确定,如何以正确的方式使用 .click。
我查看了手册 (http://api.jquery.com/click/),但找不到问题的答案:
我正在用这样的 JS 生成一个 div 结构:
<div>
<img id='img_1' src="click.gif">
</div>
<div id='content_1'> Text</div>
很多这些块是使用以下函数生成的。最后,每张图片都会得到一个点击事件来改变相关文本的css:点击img_1会改变content_1的css。 我试试这段代码(简化版):
$.each(data, function(selector,content) {
id=prepare(selector);
$('#boxDiv').append(' <div>\
<img id="img_'+id+'" src="click.gif">\
</div>\
<div id="content_'+id+'"> Text</div>');
$('#img_'+id).click(function(a) {
$('#content_'+id).css('height','100px');});
});
但是这段代码并没有按照我的要求运行。
每个'img_'+id 元素都会获得他的相关点击事件(到目前为止,天哪)
但是该函数并没有改变相关'content_'+id的css!一直以来,最后一个内容元素都在更改。
看起来,.click 回调函数在添加点击事件时没有得到id,而是在执行回调函数时。此时,id(当然)始终是最后一个元素。
所以问题是,如何将当前(相关)id 带入 .click -callback 函数中?
//更新:我不确定,如果在这种情况下使用 live() 是否有帮助:我试过这个,但没有任何成功。
问题不是缺少点击事件。问题是,在每次点击时,回调函数都会使用最后一个id 触发。
例子。
生成的内容如下所示:
<div>
<img id='img_1' src="click.gif">
</div>
<div id='content_1'> Text</div>
<div>
<img id='img_2' src="click.gif">
</div>
<div id='content_2'> Text</div>
<div>
<img id='img_3' src="click.gif">
</div>
<div id='content_3'> Text</div>
JS代码将一键事件绑定到img_1,一键事件绑定到img_2,一键事件绑定到img_3。
我把回调函数的内容改成:
$('#expand_'+id).live('click',function() {console.info(id);});
所以我看到 ID 的内容:通过单击 img_1 或 img_2 id 为 3。可能是因为,3 是每个循环的最后一个值。那么如何在回调中获取相关的id?
感谢您的任何帮助。
【问题讨论】:
-
您在 click 事件处理程序中的选择器中缺少
#。 -
谢谢,我会编辑这个 - 但这只是写这个简化问题的一个错字
-
您的代码似乎有效:jsfiddle.net/Bqfye
-
你确定你使用的是
$.each吗?如果您使用普通的for循环,您的问题将是有意义的。同样,您的代码在我的小示例中运行良好。也许您可以自己设置一个更完整的jsfiddle.net,从而重现问题。 -
是的,我使用 $.each。所以问题接缝位于一些代码细节中,我在这个简化的示例中进行了更改,以便为您提供更好的概述。我已经更新了代码,为真实版本带来了更多的东西......也许不使用原始密钥
selector是个问题?!我已修改此选择器以将此内容用作 HTLM id
标签: javascript jquery callback click