Jquery 尝试通过 onclick 事件使用动态 ID
我遇到的问题是,当我单击 LIKE div 时,它会打开所有文本框,
它只需要在单击事件上显示一个文本框。
下面是 html 示例:
<div id="sublike-1">Like</div>
<div id="sublike-form-1"><input type="text" /> Save</div>
<div id="sublike-2">Like</div>
<div id="sublike-form-2"><input type="text" /> Save</div>
<div id="sublike-3">Like</div>
<div id="sublike-form-3"><input type="text" /> Save</div>
我的 Jquery:
// Display Sub Like form
$(this).find("div[id^='sublike-']").live('click', function(){
$("div").find("div[id^='sublike-form-']").toggle();
});
我该怎么做才能使其不会同时打开两个文本框,我必须更改我的 html div、我的 jquery 还是两者都更改?
谢谢
The problem I'm having is that when I click on the LIKE div it opens all textboxes
It needs to display only the one textbox on the click event.
Here is the example html:
<div id="sublike-1">Like</div>
<div id="sublike-form-1"><input type="text" /> Save</div>
<div id="sublike-2">Like</div>
<div id="sublike-form-2"><input type="text" /> Save</div>
<div id="sublike-3">Like</div>
<div id="sublike-form-3"><input type="text" /> Save</div>
My Jquery:
// Display Sub Like form
$(this).find("div[id^='sublike-']").live('click', function(){
$("div").find("div[id^='sublike-form-']").toggle();
});
What can I do so that it does not open both textboxes at the same time, must I change my html div's, my jquery or both?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
如果您绝对确定每个文本框都位于“Like”元素旁边,则可以使用
siblings
或next
:但是如果文本框可能距离 Like 元素“很远”,你可以解析 id:
检查这个例子:
http://jsfiddle.net/marcosfromero/ZbTzN/
If you're absolutely sure that every textbox will be next to the "Like" element, you can use
siblings
ornext
:But if textbox might be "far" from the Like element, you can parse the id:
Check this example:
http://jsfiddle.net/marcosfromero/ZbTzN/
jQuery 论坛答案
您必须将点击事件添加到现有元素。您不能将事件添加到动态创建的 dom 元素。如果您想向它们添加事件,您应该使用“.on”将事件绑定到现有元素。
.delegate 也应该工作。
jQuery forum answer
You have to add click event to an exist element. You can not add event to dom elements dynamic created. I you want to add event to them, you should bind event to an existed element using ".on".
.delegate should work,too.
根据 DOM,尝试一下应该可以:)
According to DOM, try this should work:)
我看到其他人发布了一些基于
.live
的非常有效的解决方案,但我想无论如何我都会提出我的解决方案,首先,我建议您稍微更改一下标记,如果可以的话,像这样,
这为标记提供了更具可读性和语义的结构,使其更易于阅读和遵循。
接下来,对于代码,我强烈鼓励使用
.delegate
方法而不是.live
。应该可以解决问题。
I see the others have posted some very working solutions based on
.live
, but I figured I'd put my solution anyway,First, I'd suggest you change your markup a bit, if you can, like so,
This gives a more readable and semantic structure for the markup, making it easier to read and follow.
Next, for the code, I strongly encourage using
.delegate
method instead of.live
.should do the trick.
我解决了添加类而不是 id 的问题。如果你可以将 id 更改为 class,就可以了
I fix issue adding class instend of id. If you can change id into class, will work