Jquery 尝试通过 onclick 事件使用动态 ID

发布于 2024-10-31 07:52:06 字数 739 浏览 1 评论 0原文

我遇到的问题是,当我单击 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

∝单色的世界 2024-11-07 07:52:06

如果您绝对确定每个文本框都位于“Like”元素旁边,则可以使用 siblingsnext

$(document).find("div[id^='sublike-']").live('click', function(){
    $(this).siblings("[id^='sublike-form-']:first").toggle();
});

但是如果文本框可能距离 Like 元素“很远”,你可以解析 id:

$(document).find("div[id^='sublike-']").live('click', function(){
    var num = this.id.split('-')[1];
    $('#sublike-form-' + num).toggle();
});

检查这个例子:
http://jsfiddle.net/marcosfromero/ZbTzN/

If you're absolutely sure that every textbox will be next to the "Like" element, you can use siblings or next:

$(document).find("div[id^='sublike-']").live('click', function(){
    $(this).siblings("[id^='sublike-form-']:first").toggle();
});

But if textbox might be "far" from the Like element, you can parse the id:

$(document).find("div[id^='sublike-']").live('click', function(){
    var num = this.id.split('-')[1];
    $('#sublike-form-' + num).toggle();
});

Check this example:
http://jsfiddle.net/marcosfromero/ZbTzN/

水染的天色ゝ 2024-11-07 07:52:06

jQuery 论坛答案

您必须将点击事件添加到现有元素。您不能将事件添加到动态创建的 dom 元素。如果您想向它们添加事件,您应该使用“.on”将事件绑定到现有元素。

$('p').on('click','selector_you_dynamic_created',function(){...});

.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".

$('p').on('click','selector_you_dynamic_created',function(){...});

.delegate should work,too.

墨落画卷 2024-11-07 07:52:06
$(this).find("div[id^='sublike-']").live('click', function(){
 $(this).next().toggle();
});
$(this).find("div[id^='sublike-']").live('click', function(){
 $(this).next().toggle();
});
追风人 2024-11-07 07:52:06

根据 DOM,尝试一下应该可以:)

$(this).find("div[id^='sublike-']").live('click', function(){
 $(this).next('div[id^="sublike-form-"]').toggle()
});

According to DOM, try this should work:)

$(this).find("div[id^='sublike-']").live('click', function(){
 $(this).next('div[id^="sublike-form-"]').toggle()
});
鹿童谣 2024-11-07 07:52:06

我看到其他人发布了一些基于 .live 的非常有效的解决方案,但我想无论如何我都会提出我的解决方案,

首先,我建议您稍微更改一下标记,如果可以的话,像这样,

<div class="sublike-box">
    <a class="sublike-btn">Like</a>
    <div class="sublike-form"><input type="text" /> Save</div>
</div>

<div class="sublike-box">
    <a class="sublike-btn">Like</a>
    <div class="sublike-form"><input type="text" /> Save</div>
</div>

<div class="sublike-box">
    <a class="sublike-btn">Like</a>
    <div class="sublike-form"><input type="text" /> Save</div>
</div>

这为标记提供了更具可读性和语义的结构,使其更易于阅读和遵循。

接下来,对于代码,我强烈鼓励使用 .delegate 方法而不是 .live

$('div.sublike-box').delegate('a.sublike-btn', 'click', function (e) {
    $(this).next('div.sublike-form').toggle();
});

应该可以解决问题。

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,

<div class="sublike-box">
    <a class="sublike-btn">Like</a>
    <div class="sublike-form"><input type="text" /> Save</div>
</div>

<div class="sublike-box">
    <a class="sublike-btn">Like</a>
    <div class="sublike-form"><input type="text" /> Save</div>
</div>

<div class="sublike-box">
    <a class="sublike-btn">Like</a>
    <div class="sublike-form"><input type="text" /> Save</div>
</div>

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.

$('div.sublike-box').delegate('a.sublike-btn', 'click', function (e) {
    $(this).next('div.sublike-form').toggle();
});

should do the trick.

烂人 2024-11-07 07:52:06

我解决了添加类而不是 id 的问题。如果你可以将 id 更改为 class,就可以了

I fix issue adding class instend of id. If you can change id into class, will work

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文