2010-03-08 2 views
2

Internet Explorer не любит мой селектор JQuery. Не уверен, что это мои слабые навыки JQuery или общая странность Explorer.JQuery Selector не работает в Internet Explorer

Вот код:

$("#field_"+index+" #field_Label").val(); 

[ДИВ field_1]

<input id="field_Label" //... you get the picture. 

объяснить это .. У меня есть DIV маркированы field_1, field_2 .. и т.д .. Интернет исследователь, как представляется, найти первую итерацию, но не может найти вторую.

Спасибо вам всем, и благодаря вам stackoverflow.

Есть ли лучший способ, которым я должен делать это ..

Вот более полный фрагмент кода:

<li id="blank"> 
<div id="field_1" style="background: #BDCFFF; color: #1028BD;margin: 10px; border: 1px solid black;width: 400px; height: 100px;"> 
<table> 
<tr><td>Label:</td><td><input class="field_Label" id="field_Label" type="text"/></td></tr> 
<tr><td>Type:</td><td><input id="field_Type" type="text" value="2"/></td></tr> 
<tr><td>Id:</td><td><input id="idField" type="text" value="0"/></td></tr> 
</table> 

</div> 
+5

Вы не пытаетесь использовать одно и то же значение «id» для нескольких элементов, не так ли? Потому что это не сработает; это своего рода противоречие с определением «id», которое должно быть глобально уникальным на странице. – Pointy

+0

Почему это под wiki сообщества? –

+0

Да, я знаю его странно .. Он работал на Safari и Firefox .. Я не уверен, что происходит. Я могу переключиться на классы и идентификаторы, я думаю .. То, что я действительно пытаюсь сказать, это дать мне метку с ЭТОЙ ИДОМ, в стороне от этого DIV .. – user284503

ответ

1

Изменение #field_Label к .field_Label, а затем получить доступ к

$("#field_"+index+".field_Label").val(); 

Без пространства beween значения, поэтому выход будет # field_1.field_Label - (Ie любит специфику)

+0

Странно .. Я попробовал это .. изменил ярлык на класс .. и обратно и дальше .. все еще странно. alert ($ ("# field_1.field_Label"). Val()); user284503

+0

Я не уверен, что это какая-то помощь, но вы можете немного развернуть (# field_1, table, .field_label) или что-то, так как таблицы могут иметь смешные эффекты для структуры DOM в IE. В любом случае, если вы просто добавили имя класса как class = 'field_1_Label' и т. Д., Вы сможете получить к ним доступ напрямую и не должны быть более сложными в этом отношении –

2

Начинайте каждый селектор с запятой:

$("#field_" + index + ", #field_Label")........... 
+0

Я не думаю, что это он. Мое подозрение в том, что у него создается впечатление, что значения «id» ограничены родительскими элементами. Это неправда. (Разумеется, ваш ответ не ошибается, но я не думаю, что это применимо.) – Pointy

+0

@Pointy: не так уж и уверен, но, глядя на его вопрос, это то, что я мог понять. Спасибо – Sarfraz

+0

а может быть, это будет полезно ** кому-то ** по крайней мере :-) – Pointy

0

вам должен предоставить вашему подразделению класс и сделать

var inputvals = $('.class_name').val(); 

, то вы можете делать то, что хотите, с ними в целом, и вам не нужно разделять кучу идентификаторов

+0

Я пытался разбить их друг от друга, так как я нажимаю каждого из них на объект в Форлопе. Я пытался избежать этого ... но, возможно, придется использовать .each на всех из них индивидуально. – user284503

3

Попробуйте использовать класс на входе вместо id. Только один вход должен иметь id field_Label.

<input class="field_Label" /> 
selector: $("#field_"+index+" .field_Label").val(); 

Это обновление с учетом фрагмента кода, который вы добавили. Я переписал его, изменив идентификатор на класс.

<div id="field_1"> 
<table> 
<tr><td>Label:</td><td><input class="field_Label" type="text"/></td></tr> 
<tr><td>Type:</td><td><input class="field_Type" type="text" value="2"/></td></tr> 
<tr><td>Id:</td><td><input class="idField" type="text" value="0"/></td></tr> 
</table> 
</div> 

Selectors: 
var label = $("#field_1 .field_Label").val(); 
var type = $("#field_1 .field_Type").val(); 
var id = $("#field_1 .idField").val(); 

Класс вместо идентификатора, если у вас будет много таблиц с одним и тем же входом. В противном случае, если входы уникальны просто использовать ID, пример: селектор:. $ ("# IdField") Вал()

+0

спасибо .. Я проверю. – user284503

2

Спасибо всем за помощь .. Я, наконец, разрешил это. Это было просто странно с , это только создавало проблему с Интернетом Explorer .. но это то, что я сделал с , чтобы он работал.

$("#field_"+index).find("#field_Label").val(); 

/* Да здравствует StackOverflow !! */

0

Спасибо всем за помощь .. Я сделал окончательно решить эту проблему .. это было просто странно, так как это только казалось, вызвать проблема с Internet Explorer .. но это то, что я сделал заставить его работать.

$ ("# field _" + index) .find ("# field_Label"). Val();

/* Да здравствует StackOverflow !! */

Вы спасли меня ЧАСЫ времени. Спасибо!!! IE является дьявол

0
Thanks everyone for the help.. I did finally resolve this.. it was just 

странно, так как это только казалось, вызвать проблема с Internet Explorer .. но это то, что я сделал, чтобы заставить его работать.

$("#field_"+index).find("#field_Label").val(); 

/* Long live StackOverflow !! */ 

Как уже говорилось, внутренний .find() не является необходимым и чрезмерно излишним.

По существу, идентификаторы являются методом быстрого выбора с помощью механизма выбора Sizzle с помощью jQuery. Используя уникальный идентификатор, выбор является самым быстрым методом. По убыванию идентификатора из другого идентификатора добавляется ненужное дополнительное вычисление. Скорее всего, вы не столкнетесь с замедлением производительности, но это не очень хорошая привычка.

Это то, что вы должны делать, чтобы получить доступ к этому элементу:

$("#field_label").val(); 

Источник: http://www.artzstudio.com/2009/04/jquery-performance-rules/

0

Ну, кроме того факта, что FIELD_LABEL должен быть классом, а не идентификатор в том, что я вижу вашего образца; если вам действительно нужно иметь два селектора id потомков, вы можете использовать find().

Таким образом, вместо того, чтобы:

$("#field_" + index + " #field_Label") 

Вы можете использовать это:

$("#field_" + index).find("#field_Label") 

Это прекрасно работает в IE.

Смежные вопросы