2010-10-06 34 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