2010-10-06 38 views
1

注:我有一个解决这个问题的方法,但我更喜欢用逗号分隔值,而不是用空格分隔它们(这是我的解决方法)。jQuery修剪和删除父休息儿童事件

我有一个ASP.NET网站,允许教师从预设注释的DropDownList中进行选择,并将这些注释应用到学生的课堂中。我在GridView中显示学生和注释,并使用Label显示数据库中已存在的任何注释(将它们从流程中的DropDownList中移除)。当教师选择其中一个注释并点击一个按钮时,我的jQuery功能:

  1. 将所选值和文本拉出选项(假设它不是默认选项)。
  2. 检查Label.children()。length,并在文本大于零时向文本附加“,”。
  3. 使用包含值和文本的隐藏字段创建<span>标记。
  4. 追加范围内的文字。
  5. 关闭跨度。
  6. 附加一个onclick事件到跨度。
  7. 从DropDownList中删除原始选项。

span标记的onclick事件与我上面描述的相反 - 它将值和文本拉出并重新创建下拉菜单中的选项。此外,它还会在父标签中将“,”替换为“,”。我发现,当我将这些字符串(位于跨连接的onclick事件之外的字符串)替换为onclick事件消失时。我很熟悉.live(),但是由于GridView中的每一行都包含对当前正在使用的特定学生和类的唯一引用,所以我无法知道每行需要传入的值功能提前。除了我描述的解决方法或重新附加onclick事件之外,是否有解决此问题的方法?

回答

1

下面是一个想法:用类似'separator'的类包装逗号在<span> s。然后,当你删除一个项目时,你可以检查它是否是列表中的第一项,如果是,请删除后续的分隔符,如果没有,则删除前一个。所以我们会说你有一个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/

对不起,如果我误解了你的问题的任何部分。

+0

我很喜欢这个想法。当然比我的字符串解析方法更容易。尽管如此,我还是想知道为什么从父项中删除文本打破了儿童事件。 – jwiscarson 2010-10-07 14:48:04

+0

很难准确地说,没有看到你的代码。我的猜测是,你正在做的一些方面是破坏和重新创建DOM元素,从而删除事件绑定。 – Ender 2010-10-07 15:18:21

+0

如果(destinationDropDown.children())存在由于发布可怕的jQuery而使自己陷入尴尬的风险,那么您现在是: 函数DeselectComment(studentSid,value){ if(destinationDropDown.children()。长度== 1){ destinationDropDown .append(''); var parentSpan = sourceSpan.parent(); sourceSpan.remove();如果(parentSpan.text()。search(',')== 0){ parentSpan.html(parentSpan.html()。replace(',','')); } parentSpan.html(parentSpan.html()。replace(',',',')); } – jwiscarson 2010-10-07 21:02:41