JQuery val () не работает для textarea в Opera - PullRequest
7 голосов
/ 16 сентября 2010

Я отображаю модальное диалоговое окно, используя jQuery. Этот диалог имеет элемент управления textarea. Но при отправке этого диалога jQuery по какой-то причине не распознает значение этого textarea: оно всегда остается пустым. Это отлично работает в других браузерах. Я поставил оповещение для отображения значения, но оно выглядит пустым. Кто-нибудь может мне помочь в этом отношении?

Контроль:

<input type="text" id="txtGroupName"/>
<textarea rows="3" cols="30" id="txtDescription"></textarea>

jQuery-код, который использовал это значение:

var postData = new Object();
postData.GroupName = $('#txtGroupName').val();
postData.Description = $('#txtDescription').val();

$('#txtDescription').val() пусто, но $('#txtGroupName').val() правильно прочитано, поскольку это поле ввода.

Еще одна находка по этому вопросу:

Когда я помещаю предупреждение в функцию обновления после заполнения контрольного значения при загрузке страницы, это предупреждение правильно отображает существующее значение. Но он отображает только существующее значение. Он не отображает отредактированное значение после отправки модального поля.

Ответы [ 10 ]

3 голосов
/ 27 октября 2010

val () и text () в jquery работают корректно, но после установки значения textarea вам нужно повторно обработать textarea, вы можете сделать это свойство css следующим образом

if ($.browser.opera)
    $('textarea').val(someText).css({display:block});
else
    $('textarea').val(someText);

Hello from RussiaИзвините за мой английский =)

3 голосов
/ 11 ноября 2010

Я исправляю это, используя текстовое поле

$("#descripcion").keydown(function(){
     $("#descripcion").css("display","block");
});

, помещенное в конец скрипта.Прошу прощения за мой английский

1 голос
/ 06 декабря 2010

Добрый день, люди,

У меня тоже такая же проблема с Opera 10.63 и Windows.

Хак, предложенный Хавьером Канизалесом, работает, но только до тех пор, пока я не использую повторнодиалоговое окно (и текстовое поле) снова.Однако, это не так.С его хаком, после загрузки страницы и щелчка по элементу, я отображаю диалог, который был ранее скрыт (display: none) с текстовой областью внутри.Все отлично работает с первого раза (со взломом).После закрытия диалога / * $ (диалог) .hide ());* / и повторное его использование, нажав на другой элемент, хак больше не работает, и javascript / jQuery больше не получает новое типизированное значение до полной перезагрузки страницы.

Я нашел по одной из приведенных ссылоквыше, что ребята из оперы исправили эту проблему: PATCH-287 Но это не кажется мне исправленным :) Я написал там вопрос и посмотрю, ответят ли они: opera patch-287

Кому-нибудь удалось обойти это?

Спасибо и наилучшими пожеланиями.

1 голос
/ 20 сентября 2010

вы может натолкнулись на очень неясную ошибку, упоминаемую в сообщении в блоге на сайте исправления сайтов Opera 1 как "PATCH-287.TEXTAREA на blog.ebuddy.com. Opera не может прочитать правильное значение из ранее скрытой текстовой области ".

Я немного неохотно рекомендую обходные пути, не видя полного кода.

1 голос
/ 16 сентября 2010

Вы пробовали .attr("text") или .attr("value")?Я не могу проверить это, но мне это кажется логичным.

Если этого не произойдет, дайте мне знать, и я удалю этот ответ.

0 голосов
/ 12 февраля 2014

Выберите <textarea> по имени атрибута вместо идентификатора.

<textarea id="txtDescription" name="txtDescription"></textarea>
<script>
  jQuery("textarea[name='txtDescription']").val();
</script>
0 голосов
/ 31 марта 2011

Я использую этот обходной путь:


if (window.opera)
{
  document.addEventListener('focus', function(event){
    if (event.target instanceof HTMLTextAreaElement)
    {
      event.target.contentEditable = true;
      event.target.contentEditable = false;
    }
  }, true);
}
0 голосов
/ 19 сентября 2010

В опере для получения значения или текстовой области работает только:

document.getElementById ( "Описание") значение;.

странно, что $ ("textara # description"). Val ("") работает (метод set)

0 голосов
/ 16 сентября 2010

Я обнаружил, что в Chrome 6.0.472.59, Firefox 3.6.9 и Opera 10.62, все в Ubuntu 10.04, что textarea имеет / использует атрибут .val(). На случай, если некоторые другие браузеры этого не сделают или не могут сделать, я собрал эту jsbin demo . Я использовал блок if/else, чтобы охватить оба подхода. На всякий случай ...

$(document).ready(
  function() {
  $('form').submit(
    function() {

      if ($('textarea').val()) {
        var means = 'val()',
        textValue = $('textarea').val();
      }
      else {
        var means = 'text()',
        textValue = $('textarea').text();
      }

      alert('(' + means + ') ' + textValue);

      return false;
    }
    );
  }
  );

Этот вопрос Stackoverflow ( jQuery get texttarea text ) также предполагает, что он должен быть возможным и надежным, как это делает первый комментатор на странице API для Val () , в jQuery.com .

Обратите внимание, что касается Opera: демоверсия jsBin сработала только после того, как я деактивировал инструменты разработчика (по любой причине). Возможно, стоит выключить Dragonfly (если он запущен), а затем обновить демонстрационную страницу (или, очевидно, собственную тестовую страницу), чтобы увидеть, если это что-то меняет. В любом случае всегда стоит очистить кэш, чтобы убедиться, что используется самая последняя версия файлов.

0 голосов
/ 16 сентября 2010

Textarea не имеет атрибута значения. Попробуйте использовать

$('#txtDescription').text();
...