Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Перемещение строк таблицы в Firefox (https://javascript.ru/forum/jquery/2748-peremeshhenie-strok-tablicy-v-firefox.html)

barcelona 06.02.2009 17:20

Перемещение строк таблицы в Firefox
 
Здравствуйте!
В моей таблице содержаться checkbox-ы, в которых пользователь может ставить галочки и выбирать порядковые номера строчек. Далее при нажатии кнопки происходит сортировка строк таблицы с помощью jQuery. В Opera всё работает, в Firefox - нет. Вся страница исчезает, остаётся один checkbox, и страница "висит".
//Нужно отсортировать строки таблицы согласно seq
//Выбираем все отмеченные checkbox-ы, перемещать будем только эти строки
 var trs = Array();
 var i = 1;
$("input[type='checkbox'][name*='mod_']").each(function() {
   	if ($(this).attr("checked")) {
   	 //Если checkbox с таким индексом отмечен, возможно, придётся изменить порядок
   	 //i - порядковый номер строки в данный момент, (seq-1)
   	 var tr = $("table#modules tr:eq(" + i + ")");
   	 var seq = $("select[name*='seq']:eq(" + (i - 1) + ")").val();
   	if ((i-1) != seq) {
   		trs[seq-1] = tr;
   	}
      }
      i ++;
});

trs.sort();
 for (var seq = 0; seq < trs.length; seq ++) {
	var tr = trs[seq];
       tr.insertBefore($("table#modules tr:eq(" + (seq+1) + ")"));
}

Всё дело в предпоследней строчке. Если я вместо перемещаемого tr ставлю html-код - всё работает. Если выше вместо
var tr = $("table#modules tr:eq(" + i + ")");

я ставлю
var tr = $("table#modules tr:eq(" + i + ") td:eq(1) select");

(просто для примера) - всё работает, селект "переезжает" куда надо. А вот чтобы вся строчка - нет.

x-yuri 08.02.2009 03:57

приведи код полноценной странички (http://javascript.ru/paste), чтобы можно было скопировать и посмотреть, в чем проблема

barcelona 09.02.2009 17:37

Всё, я разобрался. Дело было в том, что в строчке стояло
<script></script>
. Убрал - заработало. Конечно, хотелось бы обойти это, но...

x-yuri 09.02.2009 18:03

[telepat mode]
'<script><'+'/script>'
[/telepat mode]

barcelona 10.02.2009 10:21

x-yuri, скажите пожалуйста поподробнее, в чём фокус? Я вывожу строки таблицы следующим образом:
<tr>
  <td>
	<input style="width:18%" type="checkbox" name="<?php echo "mod_".$mm->getIdModule() ?>" checked value="1" /><?php echo $mm->getName(); ?>
  </td>
  <td><?php echo '<script>drawModuleSeq('.$countM.')</script>'; ?></td>
  <td><?php echo '<script>drawModulePlace('.$mm->place.')</script>'; ?></td>
</tr>

x-yuri 10.02.2009 17:17

barcelona, не угадал. Можешь выложить страницу полностью, чтобы можно было самому попробовать? (сюда)

barcelona 10.02.2009 17:47

x-yuri, я загрузил "Код 49919144", адрес "http://javascript.ru/paste/49919144".
В начале подключается jquery. Этот код рабочий. А вот здесь - "http://javascript.ru/paste/4991962c" нерабочий. Разница - только в наличии тегов "script" во втором столбце каждой строчки. Версия Firefox - 3.0.3

Kolyaj 10.02.2009 18:51

barcelona,
в чем великий смысл делать ссылки не кликабельными? Вас прет выделение-копирование-новая_вкладка-вставка-ентер?

barcelona 11.02.2009 10:39

Kolyaj, я новичок на форуме. Исправляюсь:
http://javascript.ru/paste/49919144 - рабочий код.
http://javascript.ru/paste/4991962c - нерабочий.

x-yuri 12.02.2009 16:29

все-таки я был прав, у тебя в скрипте были обнаружены незакрытые тэги (</option>, </select>)
это быть не должно (http://www.w3.org/TR/html401/interac...ml#edef-SCRIPT -> http://www.w3.org/TR/html401/sgml/dtd.html#Script -> http://www.w3.org/TR/html401/types.html#type-cdata):
Цитата:

Although the STYLE and SCRIPT elements use CDATA for their data model, for these elements, CDATA must be handled differently by user agents. Markup and entities must be treated as raw text and passed to the application as is. The first occurrence of the character sequence "</" (end-tag open delimiter) is treated as terminating the end of the element's content. In valid documents, this would be the end tag for the element
соответственно можно писать '</option>' -> '<'+'/option>' или '<\/option>'

p.s. советую пользоваться каким-нибудь валидатором. Например, к firefox есть плагин HtmlValidator, Опера позаволяет отправлять текущую страницу на валидации или http://validator.w3.org/. Ты бы сам тогда смог решить свою проблему ;-)

p.p.s. обычно приемлемо не использовать document.write (т.е. вносить изменения по onload), думаю


Часовой пояс GMT +3, время: 12:01.