Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Перенос данных (https://javascript.ru/forum/misc/48534-perenos-dannykh.html)

Sakyra 07.07.2014 21:13

Перенос данных
 
Добрый вечер дорогие форумчане!

Есть задача не знаю можно ли ее осуществить?!

Имеется информация в таком типе!

Страница №1
<div class="over-1">ТЕСТОВЫЙ ТЕКСТ ОДИН</div>
<div class="over-2">ИНФОРМАЦИЯ ОДИН</div>
<div class="over-3">ТЕКСТ ДВА</div>
<a href="/stuff/1-0-0-0-1">Кнопка на другую страницу</a>


Страница №2
<select size="1" class="test-1" name="filter1">
<option value="0">- выбрать -</option>
<option value="1">ТЕСТОВЫЙ ТЕКСТ ОДИН</option>
<option value="2">ТЕСТОВЫЙ ТЕКСТ ДВА</option>
</select>

<select size="1" class="test-2" name="filter2">
<option value="0">- выбрать -</option>
<option value="1">ИНФОРМАЦИЯ ОДИН</option>
<option value="2">ИНФОРМАЦИЯ ДВА</option>
</select>

<select size="1" class="test-3" name="filter3">
<option value="0">- выбрать -</option>
<option value="1">ТЕКСТ ОДИН</option>
<option value="2">ТЕКСТ ДВА</option>
</select>



Вопрос возможно ли авто заполнение селектов на второй странице при клике кнопки <a href="/stuff/1-0-0-0-1"> на первой странице??
если на странице один в <div> уже вписана альтернативная информация?? Искала подобное на форуме не смогла найти помоги пожалуйста с поиском информации по данному типу решения! Заранее большое всем спасибо!

Aetae 07.07.2014 21:58

Если я правильно понял:
на первой странице добавьте:
document.body.onmousedown = function(t){
    if((t=t.target).tagName == 'A'){
        t.search = encodeURI(
            JSON.stringify(
                Array.prototype.map.call( 
                    document.querySelectorAll('[class^="over-"]'), 
                    function(el){ return el.innerHTML.trim() }
                )
            )
        )
    }
}

на второй:
window.onload = function(){
    if(location.search){
        var txt = JSON.parse( decodeURI( location.search.slice(1) ) );
        var options = document.getElementsByTagName('option'), i = options.length;
        while(i--){
            if(txt.indexOf( options[i].innerHTML.trim() ) !== -1){
                options[i].selected = true;
            }
        }
    }
}

Но вообще, обычно такие вещи делают на сервере.

Sakyra 07.07.2014 22:29

Цитата:

Сообщение от Aetae (Сообщение 319891)
Aetae, Но вообще, обычно такие вещи делают на сервере.

Увы использую систему Ucoz максимум php json

Sakyra 07.07.2014 22:33

Sakyra,
Спасибо большое сейчас буду пробывать)))

Sakyra 07.07.2014 22:50

Aetae,
работает спасибо вам большое все то что мне нужно)))

Aetae 07.07.2014 23:24

Ок, тогда лучше onmousedown прописать конкретным ссылкам, примерно так:
<a href="/stuff/1-0-0-0-1" onmousedown="addSelected(event)">Кнопка на другую страницу</a>
<script>function addSelected(t){
    if((t=t.target).tagName == 'A'){
        t.search = encodeURI(
            JSON.stringify(
                Array.prototype.map.call(
                    document.querySelectorAll('[class^="over-"]'),
                    function(el){ return el.innerHTML.trim() }
                )
            )
        )
    }
}</script>
сейчас просто информация добавляется ко всем.

Sakyra 09.07.2014 08:26

Aetae,
спасибо и правда такой вариант на много лучше :thanks:

Sakyra 20.07.2014 01:16

Добрый вечер возник вопрос прощу помощи дорогие форумчане!

К примеру у меня заполнилась адресная строка таким образом
сайт.ру/stuff/1-0-0-0-1?%5B"2010","Cadillac","Escalade"%5D

при загрузке второй странице где идет авто заполнение селекторов
у меня имеется 3 селектора

Год выпуска *: В котором уже записаны все года
Марка *: В котором уже записаны марки
Модель *: В котором не чего нет если не заполнена марка

Селект выглядит так Модель *:
<select id="swF_fl" onchange="zapolnswF()">
 <option>-</option>
 </select>


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

Год выпуска *: 2010
Марка *: Cadillac
Модель: -

а третий селект по прежнему черточка, если выбрать любую другую марку и потом снова поставить Cadillac то селектор Модель подгружает в себя информацию, надеюсь внятно объяснила)) спасибо за внимание и прощу помощи как разобраться с этой проблемой??

Aetae 20.07.2014 04:17

Надо понимать третий select заполняется скриптом и изначально пустой, потому и не работает.

Могу предположить, что надо сделать так(вторая страница):
window.onload = function(){
    if(location.search){
        var txt = JSON.parse( decodeURI( location.search.slice(1) ) );
        var selects = document.getElementsByTagName('select'), i = selects.length;
        while(i--){
            if(selects[i].onchange){
                selects[i].onchange(); //искусственно вызываем change
            }
        }

        var options = document.getElementsByTagName('option'), i = options.length;
        while(i--){
            if(txt.indexOf( options[i].innerHTML.trim() ) !== -1){
                options[i].selected = true;
            }
        }
    }
}

Sakyra 20.07.2014 21:47

Aetae,
Спасибо большое сейчас буду пробовать ваши советы! :thanks:

Sakyra 20.07.2014 22:01

Aetae,
по пробовала но скрипт не реагирует не заполняет не один селект :(

Sakyra 20.07.2014 22:22

если я хоть чуть чуть понимаю))) то мне кажется это событие не срабатывает

var selects = document.getElementsByTagName('select'), i = selects.length;
while(i--){
     if(selects[i].onchange){
         selects[i].onchange();
    }
}

Aetae 20.07.2014 22:58

Странно. Этот скрипт должен заменить предыдущий, возможно вы просто его добавили?

Sakyra 20.07.2014 23:02

Aetae,
я заменила на 2 странице это
window.onload = function(){
    if(location.search){
        var txt = JSON.parse( decodeURI( location.search.slice(1) ) );
        var options = document.getElementsByTagName('option'), i = options.length;
        while(i--){
            if(txt.indexOf( options[i].innerHTML.trim() ) !== -1){
                options[i].selected = true;
            }
        }
    }
}


На это

window.onload = function(){
    if(location.search){
        var txt = JSON.parse( decodeURI( location.search.slice(1) ) );
        var selects = document.getElementsByTagName('select'), i = selects.length;
        while(i--){
            if(selects[i].onchange){
                selects[i].onchange(); //искусственно вызываем change
            }
        }

        var options = document.getElementsByTagName('option'), i = options.length;
        while(i--){
            if(txt.indexOf( options[i].innerHTML.trim() ) !== -1){
                options[i].selected = true;
            }
        }
    }
}


не чего не изменяла не редактировала как вы мне посоветовали!

Но если убрать то все начинает работать кроме 3 селекта
var selects = document.getElementsByTagName('select'), i = selects.length;
while(i--){
     if(selects[i].onchange){
         selects[i].onchange();
    }
}

Aetae 20.07.2014 23:08

Тогда напрямую:
window.onload = function(){
    if(location.search){
        var txt = JSON.parse( decodeURI( location.search.slice(1) ) );
        var select = document.getElementById('swF_fl');
        if(select.onchange){
            select.onchange(); //искусственно вызываем change
        } 
        var options = document.getElementsByTagName('option'), i = options.length;
        while(i--){
            if(txt.indexOf( options[i].innerHTML.trim() ) !== -1){
                options[i].selected = true;
            }
        }
    }
}

Sakyra 20.07.2014 23:09

Aetae,
Сейчас попробую также прочтите ЛС :thanks:

Sakyra 20.07.2014 23:17

Aetae,
Работаю первый два селекта 3 по прежнему выдает черточку возможно ли с вами связаться вконтакте или еще где либо? показать вам сайт возможно есть какие то ньюансы? а то боюсь тут ругаться за флуд начнут ;)

Aetae 21.07.2014 00:02

В личку пишите адрес, посмотрю.

Aetae 21.07.2014 01:01

window.onload = function(){
    if(location.search){
        var txt = JSON.parse( decodeURI( location.search.slice(1) ) );
        var selects = [].slice.call(document.getElementsByTagName('select')), //создаём массив из select'ов
            i = selects.length; //количество селестов
        while(i--){ //перебираем все селекты на странице(в лучше наверное перебирать конкретные, чтобы не было коллизий)
            var options = selects[i].getElementsByTagName('option'), //получаем options текущего select
                j = options.length; 
            while(j--){ //перебираем option 
                if(txt.indexOf( options[j].innerHTML.trim() ) !== -1){ //если значение совпадает с одним из переданных в адресе значений
                    options[j].selected = true; //выбираем его
                    $(selects[i]).trigger('change'); //вызываем событие change через библиотеку jquery
                    selects.splice(i,1); //удаляем отработанный select из массива
                    i = selects.length; //чтобы перебор select начался сначала
                    break; //прервыем перебор option
                }
            }
        }
    }
}

Sakyra 21.07.2014 01:17

Aetae,
Спасибо :thanks:

Sakyra 21.07.2014 15:00

Aetae,
А таким способом только авто заполнение селекта можно сделать?

К примеру если мне нужно название кнопки переместить с страницы №1 на страницу №2 в поле input, как мне все это организовать?)

И где можно об этом почитать? Заранее большое спасибо!

Aetae 21.07.2014 16:01

Передавать таким образом можно любые js данные, способ универсален:
function addSelected(event){
	t=event.target;
	var array = Array.prototype.map.call(
	    document.querySelectorAll('[class^="over-"]'),
	    function(el){ return el.innerHTML.trim() }
	); //получаем массив состоящий из innerHTML всех элементов с class начинающимся на "over-"
	t.search = encodeURI( 
	    JSON.stringify( array ) //проевращаем javascript-объект в строку
	); //кодируем строку
}

window.onload = function(){ //как только страница загружена полностью
    if(location.search){ //если в адресе есть параметр после ?
        var obj = JSON.parse( decodeURI( location.search.slice(1) ) ); //декодируем и преобразуем обратно в javascript-объект
		//выполняем действия с загруженными данными	
    }
}

Соответственно, что дальше делать с данными - уже вам решать.
Почитать тут: http://learn.javascript.ru/dom


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