Установка значения textarea в FF 4 больше не works…is это от меня или jQuery?

#jquery

#jquery

Вопрос:

У меня есть такой простой:

 <textarea id="ind_comment" rows="4" cols="32"></textarea>
  

Тогда у меня есть следующее:
Есть скрытое поле и кнопка, которая имеет класс «showComment». Если в скрытом поле есть значение, текстовое поле должно быть заполнено этим значением.

 $(".showComment").click(function(){
    var rowid       = $(this).attr("rowid");
    var hiddenid    = "line_"   rowid   "_new_cmt";

    $("#ind_comment").val($("#line_"   rowid   "_new_cmt").val();

    var x = $(this).position().left   ($(this).outerWidth() -350);
    var y = $(this).position().top - $(document).scrollTop();

    $("#dialog").dialog({ 
        bgiframe: true,
        position: [x,y],
        width: 400,
        height: 200,
        title: "Comments specific to this entry",
        modal: true,
        buttons: { "Close": function() { 
            $("#line_"   rowid   "_new_cmt").val($("#ind_comment").val());
            $("#ind_comment").val("");
            $(this).dialog("destroy"); 
        }}
    });
});
  

$(«#ind_comment»).val(«»); очищает значение, как и должно быть.

В FF4 (Windows или OS X)

 $("#ind_comment").val(document.getElementById(hiddenid).value);
  

не работает, но отлично работает в IE (протестировано с 8) и FF 3.x

Я также пробовал:

 $("#ind_comment").val($("#line_"   rowid   "_new_cmt").val();
  

безуспешно.

Это с jQuery 1.5.2

Я что-то упускаю или есть проблема с FF4?

Вот демонстрационная версия jsFiddle…Это работает в первый раз, но не во второй раз, когда нажимается какая-либо из кнопок.

Комментарии:

1. Я только что создал скрипку для FF4. Это работает, и я предполагаю, что этот шаткий шаблон инкрементного rowid сломался в операционной системе, как это всегда будет.

Ответ №1:

Кажется, что во всех других примерах не учитывалась часть диалога jquery … может быть, именно в этом проблема …?

Хотя jquery — это что-то вроде крысиного гнезда, зачем проходить через все дополнительные обручи?

  1. Измените скрытый ввод на текстовую область
  2. Оберните эту текстовую область в свой собственный div
  3. При нажатии кнопки включите эту обернутую текстовую область в диалоговое окно вместо использования одного div в качестве текстовой области

Таким образом, вы избегаете необходимости менять местами текст и тому подобное…

Может упростить задачу в долгосрочной перспективе…

Ответ №2:

Прежде всего, ваш шаблон инкрементной переменной id ужасен, и вы должны заменить его извлечением фактического номера строки. Кроме того, ваше имя переменной является странным и противоречит стандартным методам jQuery. Почему вы устанавливаете element = $(this) ? Это вам ничего не даст, и это менее наглядно, чем $(this) потому что вы не знаете, что у вас есть объект jQuery. Кроме того, вы смешиваете document.getElementById и $('#') без причины.

Кстати, ваш код работает.

Вот тестовая страница в реальном времени.

Комментарии:

1. Итак, я обновил приведенный выше код. Я использую var rowid = $(this).attr(«rowid»); только потому, что в некоторых случаях строки не являются последовательными. У меня может быть line_17_new_cmt, line_1_new_cmt, line_2_new_cmt. Я добавил в ваш jsFiddle ( jsfiddle.net/mR2NQ/10 ) и это работает при первом нажатии, но не во второй раз.

Ответ №3:

У меня идентичная проблема. старые значения восстанавливаются в текстовых областях в диалоговых окнах пользовательского интерфейса jquery после вызова .dialog во второй раз. Это происходит только в Firefox 4 (текущая версия 4.0)

я думаю, что нашел ошибку пользовательского интерфейса jquery:

http://bugs.jqueryui.com/ticket/7239

Комментарии:

1. Чтобы обойти это, я следовал идее, изложенной в принятом ответе. На данный момент это помогло мне.

Ответ №4:

Я только что столкнулся с той же проблемой, похоже, есть ошибка с jQueryUI dialog 1.8 в новом Firefox.

Вызов диалогового окна (‘open’) сбрасывает значение для всех текстовых областей при использовании текущей версии Firefox5 и, возможно, последних версий Firefox4 (клиент сообщил мне об этом), в то время как в Chrome это работает должным образом. Похоже, что это не влияет на другие входные данные.

И раньше это работало в Firefox примерно 6 месяцев назад, я уверен в этом, и с тех пор в этом проекте не было изменено ни строчки javascript.