Различия между IE и FF при использовании jquery и textarea - PullRequest
3 голосов
/ 25 апреля 2011

Кажется, это простая проблема, но до сих пор меня тормозили почти на каждом шагу.

Я динамически создаю пользовательский интерфейс, используя jquery и json, используя список идентификаторов, которые возвращаются из нескольких вариантов выбора. Часть этого интерфейса включает в себя пользовательское обоснование, которое динамически создается следующим образом:

$('<textarea>').attr({
'rows': '5', 
'cols': '50', 
'name': appId,  
'id': 'AppJust' + appId}).appendTo('#contentColumn>#AppPanel' + appId);

Далее в процессе у меня есть следующий код:

var userJustification = $('textarea[name=' + appId + ']').val() ;

В FF, если я предупреждаю userJustification, я получаю текст, который был напечатан в текстовой области.

В IE, если я предупреждаю userJustification, я получаю undefined.

Я тоже пробовал var userJustification = $('textarea[name=' + appId + ']').attr('value') ; с точно такими же результатами.

Если я полностью изменюсь:

var userJustification = $('textarea[name=' + appId + ']').val() ;

до:

var userJustification = $('textarea#AppJust' + appId).val() ;

Работает ...

Мой вопрос:

Почему подход с именами работает в FF, а не IE?

EDIT

Используя информацию, размещенную Скоттом, я был заинтригован и немного повозился с кодом.

var userJustification = $('textarea[name=' + appId + ']').val() ; 

Но это все еще не работает в моей среде (IE7) ... Я не уверен, почему или как, потому что для всех намерений и целей, которые должны работать должным образом. Скрипт Скотта доказывает это.

Так что без всякой веской причины (на самом деле случайно) сделал небольшое изменение в коде:

var userJustification = $('textarea[name = ' + appId + ']').val() ; 

(обратите внимание на пробел до и после '=' внутри селектора)

И это работает ... Сначала я подумал, что это как-то связано с тем, что appId является целым числом ... но даже в скрипте, если я изменяю "One" на 25 ... он все равно работает правильно.

Я проверил в FF, чтобы увидеть, как он обрабатывался ... и вот пример того, как выглядит текстовая область, когда она создается ... ничего необычного:

<textarea id="AppJust40" rows="5" cols="50" name="40"></textarea>

Может ли это иметь какое-то отношение к способу отображения самой страницы? Это приложение Apex на сервере Apache ????

Ответы [ 2 ]

0 голосов
/ 25 апреля 2011

Согласно нашему разговору в ваших комментариях, добавление кавычек вокруг значения атрибута решает проблему в IE7 для вас:

$('textarea[name="' + appId + '"]').val();

Несмотря на то, что рабочая демонстрация jsFiddle Сначала я вставил в ваши комментарии работы в IE7 и IE8 без кавычек.

0 голосов
/ 25 апреля 2011

Это очень странно, единственное, о чем я могу думать, это то, что IE не поддерживает селекторы атрибутов (CSS, [name =]). Однако это не должно иметь значения, поскольку JQuery использует собственный движок для «поиска» элементов в DOM.

Я бы порекомендовал регистрировать это как ошибку в JQuery.

...