2010-05-17 75 views
0

我已經把自己寫進了一個角落,並希望有一個「簡單」的出路。我試圖循環瀏覽我的頁面上的一系列事物,並構建一個key:value對。這是我的結構:jQuery .val()選擇器混亂

<div class="divMapTab" id="divMapTab34"> 
    <div class="divFieldMap"> 
     <select class="selSrc" id="selTargetnamex"><options....></select> 
    </div> 
</div> 
<div class="divMapTab" id="divMapTab87"> 
    <div class="divFieldMap"> 
     <select class="selSrc" id="selTargetnamex"><options....></select> 
    </div> 
</div> 

它的方式比這更復雜,並且每個divFieldMap div中有很多選擇元素。

這裏是正在建設我的字符串我的JS功能:

function Save() { 
     var sSaveString = ''; 

     $('.divMapTab').each(function() { 
      var thisId = this.id; 
      $('.selSrc', "#" + thisId).each(function() { 
       var thisSubId = this.id; 
       //alert(thisSubId); <-- HERE IS THE PROBLEM 
       var sTargetCol = thisSubId.replace('selTarget', ''); 
       var sValue = this.val(); 
       sSaveString += sTargetCol + '¸' + sValue + '·'; 
      }); 
     }); 
    } 

在有警告框和文本行「這裏的問題是」是我試圖讓所選擇的值的「當前」選擇輸入元素,但該元素的ID不是唯一的(我認爲這是,但我搞砸了)。在「每種」類型的jQuery語句中,是否有一種很好的方法來使用「this」來獲得我真正需要的確切select元素,即使它沒有唯一的id?

+2

重複的ID總是會導致您將計算機扔出窗口。修復重複的ID – PetersenDidIt 2010-05-17 18:20:24

+0

我會的,我真的會,但我們正處於嚴酷的最後期限,坦率地說,我很害怕使用這些選擇元素的150行JS函數。這不是我的代碼,我想我會打破它。 150行JS?究竟誰是懲罰的饞嘴!?!? – 2010-05-17 18:58:03

+0

嚴重的是,在此命中產品之前修復您的重複ID。 – 2010-05-17 19:19:56

回答

1

我相信你可以使用$(this)創建一個JQuery對象的引用。那是你的追求?

+0

我沒有意識到$(this)不同於$('#'+ this.id)。但是,如果你像我這樣的白癡並且意外地得到重複的id,他們是非常不同的。 – 2010-05-17 18:33:47

+0

'$(this)'*完全*不同。 'this'運算符是對函數執行上下文的只讀引用,*對於函數*不是固定的。 https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/this_Operator – 2010-05-17 18:40:13

+0

雙魚會吃你 - 我不知道我完全按照。我知道「this」根據什麼調用什麼等而改變,但是在上面的代碼中,我可以指望「this」在來自此選擇器的匹配元素迭代中引用當前對象:$('。selSrc', 「#」+ thisId)。對? – 2010-05-17 19:08:04

3

有效的HTML元素ID 必須是唯一的。如果您的文件包含重複的ID,則所有投注均關閉。

如果您確實無法正確生成唯一ID,請改用類。

+0

其實,他們並不是唯一的。當然,這是讓我的生活!地獄!因爲他們不是(我認爲他們會,但我沒有意識到我的項目可能來自我的數據結構中的不同對象,所以我認爲不會有重複。) 瀏覽器高興地讓你重用ID,並將通過getElementById函數返回與該ID一起找到的第一個元素。 jQuery愉快地返回所有匹配的數組。 – 2010-05-17 18:33:09

+0

@Matt:你使用的是什麼版本的jQuery?我的jQuery當然不樂意給我一組匹配的數組。 – 2010-05-17 18:36:08

+0

我剛試過這個:alert($('#'+ this.id).length);並回來1 - 你是對的,它沒有返回所有匹配。 我已經得到了自己轉身這個頁面的混亂。它不會炸燬,但它確實沒有得到我想要的價值。我出於某種原因認爲它將我的2件物品返還給我,但從第一件物品中獲得價值,這恰好是我不想要的。我的頭在旋轉,我需要一杯飲料。感謝您的幫助。 – 2010-05-17 19:04:54

1

所以,你只是想找到每個div內選擇的值?

var myOptions = []; 

$('.divMapTab').each(function() 
{ 
    $(this).children('select').each(function() 
    { 
     myOptions.push(this.id, $(this).val()); 
    }); 
}); 

然後,myOptions將包含從每個選擇ID到它的值的鍵值對。