2011-08-03 34 views
0

我有代碼將列表項添加到無序列表中,並且與每個列表項關聯的是一個按鈕,用戶可以單擊以將該項從列表中刪除。這是動態發生的(即,他們從模態屏幕中選擇需要添加回該無序列表的東西)。通常該項目的值只是一個整數。在這種情況下,我的代碼都可以正常工作。似乎無法引用一個動態添加的字段

但是,如果該項目的值是一個字符串(因爲有時我需要處理多個代表作爲一個項目),那麼刪除不會做任何事情。

所以在運行時能產生這樣的HTML(從螢火蟲搶下)

<ul id="AgencySpecialism-selected-items" class="multi-select multi-select-selector"> 
<li> 
<label>Spec 1/Spec 2</label> 
<input id="AgencySpecialism-3|1" type="hidden" value="3|1" name="AgencySpecialism-3|1"> 
<button title="Clear selection" style="width: 28px;" onclick="AgencySpecialism_clear('3|1');return false;"> X </button> 
</li> 
</ul> 

我的JavaScript清除功能:

function <%= ViewData["ControlId"] %>_clear(id) { 

     <% if (Model.MultiSelectMode) { %> 
     alert('#<%= Model.ControlId %>-' + id); 
     alert($('#<%= Model.ControlId %>-' + id).val()); 
      $('#<%= Model.ControlId %>-' + id).closest('li').remove();    
      $('#<%= Model.ControlId %>_SelectedSpecialisms').val($('#<%= Model.ControlId %>_SelectedSpecialisms').val().replace(id + ",", "")); 
     <% } else { %> 

第一個警報顯示

#AgencySpecialism-3|1 

第二次警報顯示

Undefined 

所以它看起來像是說控制不存在 - 但基於html標記 - 它確實......?!

所以我最終的結果是,我需要這條線的工作像它應該是:

$('#<%= Model.ControlId %>-' + id).closest('li').remove(); 

如果我在

AgencySpecialism_clear(4) 

AgencySpecialism_clear('4') 

通過再如預期那樣清晰地工作唯一的區別似乎是一個是管道分隔,而不是一個單一的值:(

任何想法將不勝感激我甚至嘗試複製和粘貼實際呈現的id到clear方法..但它仍然認爲它的val是。未定義

編輯 - 對不起,在那裏拋出的.NET MVC的東西 - 但問題是關係到它的jQuery的一部分:)

+2

你試過編碼管道符號嗎? –

+1

你介意把.net的東西換成javascript嗎?我想,要看到完整的javascript更有幫助。 – reporter

+0

感謝威廉! :) – Jen

回答

2

威廉是正確的,你需要躲避管:

<div id="test|1">Test</div> 

alert($('#test\\|1').html()); 

您會想要做:

'#<%= Model.ControlId %>-' + id.replace("|", "\\|") 

http://jsfiddle.net/ryyzp/1/

的雙反斜線是因爲你需要有 '\ |'在jQuery選擇器中,所以你實際上是用第一個轉義來逃避第二個黑色的。

+0

感謝您詳細介紹如何使用該id.replace的東西 - 作品魅力:) – Jen