2010-05-17 4 views
0

Я как бы написал себя в угол и надеялся, что есть «легкий» выход. Я пытаюсь выполнить цикл вещей на моей странице и создать пару ключ: значение. Вот моя структура:jQuery .val() Selector Confusion

<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 дел.

Вот моя функция 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 + '·'; 
      }); 
     }); 
    } 

На линии, которая имеет окно с предупреждением и текст «здесь проблема» в том, что я пытаюсь получить выбранное значение «текущего» элемента ввода select, но идентификатор этого элемента не уникален (я думал, что это будет, но я испортил). Есть ли хороший способ внутри «каждого» типа выражения jQuery использовать «это», чтобы получить точный элемент выбора, который я действительно ищу, даже если у него нет уникального идентификатора?

+2

Повторяющиеся идентификаторы всегда будут приводить к выкидыванию компьютера из окна. Исправьте повторяющиеся идентификаторы – PetersenDidIt

+0

Я бы это сделал, но мы находимся в суровом сроке, и, честно говоря, я боюсь, что я буду трахаться с 150-строчной функцией JS, которая делает эти элементы выбора. Это не мой код, и я думаю, что я просто сломаю его. 150 строк JS? Кто, черт возьми, так много извинится за наказание!?!? –

+0

Серьезно, исправьте свои повторяющиеся идентификаторы перед этим хитом. –

ответ

1

Я считаю, что вы можете создать ссылку на объект JQuery, используя $(this). Это то, что вам нужно?

+0

Я не понимал, что $ (this) отличается от $ ('#' + this.id). Тем не менее, они ОЧЕНЬ разные, если вы идиот, как я, и случайно получаете дубликаты идентификаторов. –

+0

'$ (это)' is * полностью * отличается. Оператор 'this' является ссылкой только на чтение контекста выполнения функции и * не фиксирован для функции *. https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/this_Operator –

+0

Бис будет есть вас - я не уверен, что полностью следовать. Я знаю, что «это» изменяется в зависимости от того, что называется what и т. Д., Но в моем коде выше я могу рассчитывать на «это», ссылаясь на текущий объект в итерации совпадающих элементов из этого селектора: $ ('. SelSrc', "#" + thisId). Правильно? –

3

Действительные элементы HTML-кода должны быть уникальными. Если ваш документ содержит повторяющиеся идентификаторы, все ставки отключены.

Если вы действительно не можете правильно генерировать уникальные идентификаторы, начните использовать классы вместо этого.

+0

На самом деле, они не должны быть уникальными. Конечно, это превратило мою жизнь! потому что они не были (я думал, что они будут, но я не понимал, что мои предметы могут исходить из разных объектов в моей структуре данных, поэтому я предположил, что повторений не будет.) Браузеры счастливо позволяют повторно использовать ids, и вернет первый элемент, найденный с этим идентификатором, через функцию getElementById. jQuery счастливо возвращает массив всех совпадений. –

+0

@Matt: какую версию jQuery вы используете? Мой jQuery уверен, что, черт возьми, он не доставляет мне большого количества всего, что соответствует. –

+0

Я просто попробовал это: alert ($ ('#' + this.id) .length); и вернулся 1 - вы правы, он не возвращает все, что соответствует. Я так сильно обернулся, что испортил эту страницу.Он не взрывается, но он уверен, что, черт возьми, он не получает того значения, которое я хотел. Я почему-то подумал, что он возвращает мне 2 предмета, но получает значение из первого, что оказалось тем, чего я не хотел. У меня голова крутится, мне нужно выпить. Спасибо за помощь. –

1

Итак, вы просто хотите найти значение выборок внутри каждого div?

var myOptions = []; 

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

myOptions затем будет содержать пару значений ключа из каждого идентификатора выбора в его значение.