#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 — это что-то вроде крысиного гнезда, зачем проходить через все дополнительные обручи?
- Измените скрытый ввод на текстовую область
- Оберните эту текстовую область в свой собственный div
- При нажатии кнопки включите эту обернутую текстовую область в диалоговое окно вместо использования одного 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:
Комментарии:
1. Чтобы обойти это, я следовал идее, изложенной в принятом ответе. На данный момент это помогло мне.
Ответ №4:
Я только что столкнулся с той же проблемой, похоже, есть ошибка с jQueryUI dialog 1.8 в новом Firefox.
Вызов диалогового окна (‘open’) сбрасывает значение для всех текстовых областей при использовании текущей версии Firefox5 и, возможно, последних версий Firefox4 (клиент сообщил мне об этом), в то время как в Chrome это работает должным образом. Похоже, что это не влияет на другие входные данные.
И раньше это работало в Firefox примерно 6 месяцев назад, я уверен в этом, и с тех пор в этом проекте не было изменено ни строчки javascript.