Полезная информация

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№126-04-2018 13:44:35

igorpopkoff
Участник
 
Группа: Members
Зарегистрирован: 27-07-2017
Сообщений: 9
UA: Firefox 56.0

Перезагрузка при изменении select

Делаю дополнение для работы с одном сайтом, в данный момент подключаю 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 стоит имя файла)

Вроде бы ни одна из этих ошибок не должна была бы привести к перезагрузке страницы.

Проверил в Опере - всё работает, перезагрузки не происходит.

Может есть идеи, что приводит к перезагрузке? Или как можно обойти этот момент?

Отсутствует

 

№226-04-2018 16:42:47

okkamas_knife
We are the Borg.       Resistance is futile.
 
Группа: Members
Зарегистрирован: 21-10-2009
Сообщений: 9308
UA: Seamonkey 2.14

Re: Перезагрузка при изменении select

хочешь помощи - изъясняйся внятно не рассчитывая на телепатов.
если вручную тот селект поменять страница перезагружается? а перегрузившись селект остаётся в изменённом состоянии?
где код селекта(с формой)?

ну и до кучи в твоём варианте насколько я смог понять из невнятного описания иннер хтил юзать дя кнопки не есть хорошо
вот смотри кусок с этой страницы
<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)


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

Отсутствует

 

№326-04-2018 23:31:52

igorpopkoff
Участник
 
Группа: Members
Зарегистрирован: 27-07-2017
Сообщений: 9
UA: Firefox 56.0

Re: Перезагрузка при изменении select

okkamas_knife пишет:

хочешь помощи - изъясняйся внятно не рассчитывая на телепатов.

Ну извините, не думал, что данного описания может оказаться недостаточно. И так старался подробно всё расписать.

okkamas_knife пишет:

если вручную тот селект поменять страница перезагружается?

Нет. Иначе и вопроса бы не возникло. Обычный ниспадающий список с обычным интерфейсом и без какой-либо видимой реакции. Разве что по умолчанию он находится в скрытом div и показывается только по необходимости - вот, пожалуй, единственная его "уникальность".

okkamas_knife пишет:

а перегрузившись селект остаётся в изменённом состоянии?

Нет. Страница загружается из файла заново, код загружается и исполняется заново. Промотка страницы не сохраняется - открывается с самого верха.

okkamas_knife пишет:

где код селекта(с формой)?

Выделить код

Код:

<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. Или я совсем ничего не понимаю в жизни.

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2011 Mozilla Russia
Язык отображения форума: [Русский] [English]