Страницы: 1
Делаю дополнение для работы с одном сайтом, в данный момент подключаю JS-файл к сохранённой копии страницы как просто ещё один JS-файл (подключается в самом конце, перед закрытием блока body). Мой код обнаруживает, что необходимо изменить выбор в <select> и размещает на странице кнопку, при нажатии которой должен выполниться код, который и внесёт изменения:
(для удобства чтения разбиваю на несколько строк)
document.getElementById("old").innerHTML+='
<button id="b_op" onclick="
... //Некий код, который открывает блок и деактивирует эту кнопку
document.getElementById(\'ex\').selectedIndex='+so+'; //Собственно изменение Select-а
">Изменить</button>
';
Но при изменении Select-a браузер просто перезагружает страницу. Я могу успеть заметить, что код вроде бы применяется (блок открывается), но у меня всего мгновение на рассматривание - перезагрузка следует незамедлительно.
Проверено на ФФ 56 и ФФ 59 - везде перезагрузка.
На селекте не висит JS, во всяком случае явно. Код большой и запутанный, так что я никогда не найду, если что-то подвесили скрытно через JS.
Вероятно на странице применен jQerry - никогда с ним не работал.
В консоли ФФ-56 остаётся такой текст:
ReferenceError: $ is not defined xxx:4188:3
ReferenceError: $ is not defined xxx:4191:1
ReferenceError: angular is not defined xxx:4195:9
ReferenceError: $ is not defined xxx:4418:6
ReferenceError: $ is not defined xxx:4451:5
ReferenceError: show2lines is not defined xxx:4504:4
(вместо xxx стоит имя файла)
Вроде бы ни одна из этих ошибок не должна была бы привести к перезагрузке страницы.
Проверил в Опере - всё работает, перезагрузки не происходит.
Может есть идеи, что приводит к перезагрузке? Или как можно обойти этот момент?
Отсутствует
хочешь помощи - изъясняйся внятно не рассчитывая на телепатов.
если вручную тот селект поменять страница перезагружается? а перегрузившись селект остаётся в изменённом состоянии?
где код селекта(с формой)?
ну и до кучи в твоём варианте насколько я смог понять из невнятного описания иннер хтил юзать дя кнопки не есть хорошо
вот смотри кусок с этой страницы
<option value="24">Проблемы с сайтами</option>
<option value="18" selected="selected">Разработка</option>
разницу видишь?
так вот тебе не нужно даже детектить правильый селект или нет
получаешь ту форму, в ней получаешь все тэги оптион
далее в цикле перебираешь их проверяя наличие атрибута селектед и убираешь если есть и там же в цикле проверяешь значение валюе и если оно то самое до добавляешь атрибут селектед.
то что может понадобиться чтоб не искать
element.getElementsByTagName('option') - возвращает массив элементов которые внутри element
element.removeAttribute("align");
element.setAttribute(name, value);
var result = element.hasAttribute("selected");//true or false
Отредактировано okkamas_knife (26-04-2018 16:43:48)
я помню те времена когда обновления программ убирали проблемы и исправляли баги, а не добавляли их.
toxID:05AB9B827D896AACEE7FF4573A02FB8F025F46ADC856B98F65BC1BA9BD21A81DC98BA9C36CE3
Отсутствует
хочешь помощи - изъясняйся внятно не рассчитывая на телепатов.
Ну извините, не думал, что данного описания может оказаться недостаточно. И так старался подробно всё расписать.
если вручную тот селект поменять страница перезагружается?
Нет. Иначе и вопроса бы не возникло. Обычный ниспадающий список с обычным интерфейсом и без какой-либо видимой реакции. Разве что по умолчанию он находится в скрытом div и показывается только по необходимости - вот, пожалуй, единственная его "уникальность".
а перегрузившись селект остаётся в изменённом состоянии?
Нет. Страница загружается из файла заново, код загружается и исполняется заново. Промотка страницы не сохраняется - открывается с самого верха.
где код селекта(с формой)?
<form action="" method="POST" id="forma" ng-controller="VacController as vm" ng-submit="vm.setGeoIfAddressIsNotEmpty($event)"> <select name="ex" onChange="javascript:window.focus();"> <option value="0"></option> <option value="1">0</option> <option value="5">1</option> <option value="2">2</option> <option value="3" selected>3</option> <option value="4">4</option> </select>
Но тут нужно сделать тогда уточнение - программа обнаруживает этот селект по name и назначает ему ID, созвучный с name, так что потом обращение идёт через ID:
var e=document.getElementsByName('ex')[0]; //Это нужный селект alert(e.selectedIndex+' -> '+so);//Проверка, что обнаружено всё верно if (e.selectedIndex!=so) //добавляем кнопку только если нужно сделать изменения { e.id="ex"; //Даём селекту ИД .... //Тут стоит та команда, что приведена в первом посте - добавляет кнопку }
Не может же focus() вызывать перезагрузку?
Проверить старый селект всё-таки нужно. Я не могу быть уверен, что изменения, предлагаемые программой, действительно нужно будет применять. Это решение нужно будет принять пользователю. А если селект уже выбран правильно, то и не стоит беспокоить пользователя - там и без лишних кнопок будет, чем заняться.
Можно, правда, применить альтернативные функции для этого, но вряд ли проблема в использовании selectedIndex. Или я совсем ничего не понимаю в жизни.
Отсутствует
Страницы: 1