jQuery修剪并删除父中断子事件

时间:2010-10-06 22:50:51

标签: javascript jquery

注意:我有一个解决这个问题的方法,但我更喜欢用逗号分隔我在下面描述的值,而不是用空格分隔它们(这就是我的解决方法)。

我有一个ASP.NET网站,允许教师从预设评论的DropDownList中进行选择,并将这些评论应用于他们班级的学生。我在GridView中显示学生和注释,并使用Label显示数据库中已存在的任何注释(在过程中从DropDownList中删除它们)。当教师选择其中一个注释并单击一个按钮时,我的jQuery函数:

  1. 从选项中提取选定的值和文本(前提是它不是默认选项)。
  2. 检查Label.children()。length,如果文本大于零,则在文本中附加“,”。
  3. 使用包含值和文本的隐藏字段创建<span>标记。
  4. 将文字附加到范围内。
  5. 关闭范围。
  6. 将onclick事件附加到范围。
  7. 从DropDownList中删除原始选项。
  8. span标记的onclick事件与我上面描述的相反 - 它将值和文本拉出并在下拉菜单中重新创建选项。此外,它在父标签中用“,”替换字符串,如“,”。我发现当我替换这些字符串(位于我已附加onclick事件的跨度之外)时,onclick事件就会消失。

    我熟悉.live(),但是因为这个GridView中的每一行都包含对当前正在使用的特定学生和类的唯一引用,所以我无法知道每行需要传递给函数的值提前时间。除了我描述的解决方法或重新附加onclick事件之外,有没有解决此问题的方法?

1 个答案:

答案 0 :(得分:1)

这是一个想法:用<span> s中的逗号包含类似'separator'的类。然后,当您删除项目时,您可以检查它是否是列表中的第一项,如果是,则删除后续分隔符,如果不是,则删除前一个分隔符。所以我们会说你有一个像这样的html结构:

<span id="myLabel">
    <span class="comment">You're great!</span><span class="separator">, </span><span class="comment">You're mediocre!</span><span class="separator">, </span><span class="comment">You suck!</span>
</span>

这是一个点击功能,可以在保持onclick事件的同时正确删除逗号:

$('.comment').click(function() {
    //decide which comma to remove
    if ($(this).prevAll('.comment').size() == 0) {
        //this is the first comment, remove the next comma and this comment
        $(this).next('.separator').remove().end().remove();
    } else {
        //this is not the first comment, remove the previous comma and this comment
        $(this).prev('.separator').remove().end().remove();
    }
});

这是一个现场演示,显示其有效:http://jsfiddle.net/yWet5/

很抱歉,如果我误解了你问题的任何部分。