Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Динамическое формирование урла
 
 автор: SK   (04.08.2011 в 20:40)   письмо автору
2.1 Кб
 
 

Здравствуйте!
Есть такая страница, см. атачмент.

Сейчас при вводе значения в инпут, формируется урл. Надо добавить ещё несколько инпутов, при вводе значений в которые, они (значения) должны добавляться к этому же урлу в том порядке, в котором они вводятся.
Могли бы показать как это реализовать?

Надо как-то брать все инпуты:
var addLinkField = document.getElementsByTagName('input')

и в цикле проверять:
for (var i=0;i<addLinkField.length;i++){...}

но все же не могу правильно заимплементить...

  Ответить  
 
 автор: SK   (04.08.2011 в 23:45)   письмо автору
 
   для: SK   (04.08.2011 в 20:40)
 

Народ, тут вообще кто-нибудь есть, способный помочь в решении проблемы?

(Несколько лет назад, форум был как-то поактивнее... Я тогда был по другим ником, не помню его, к сожалению, пришлось зарегаться под другим.)

  Ответить  
 
 автор: АЯ   (05.08.2011 в 00:54)   письмо автору
 
   для: SK   (04.08.2011 в 23:45)
 

Вам "добавлять" надо или же "проверять"? Или и то, и другое "в одном флаконе"?

Если "добавлять", то как? Простой конкатенацией, или использовать какие-то разделители?
Если "проверять", то по какому условию?

[поправлено модератором]

  Ответить  
 
 автор: SK   (05.08.2011 в 11:43)   письмо автору
 
   для: АЯ   (05.08.2011 в 00:54)
 

Добавлять после provider=Kluwer32 через &, то есть как обычные параметры.
Допустим, должно быть 4 input'а (id=p1...id=p4), куда при вводе значений, формировался бы урл вида:

http://hybrid2.vesta.wkglobal.com/delegate/scion/document/html/docidvalue?provider=Kluwer32&p1=value1&p2=value2&p3=value3&p4=value4

причем порядок параметров p1-p4 должен быть таким, в каком я ввожу значения в соответствующие input'ы. То есть если я ввел значение сначала в <input id=p3/>, а потом в <input id=p2/> и в <input id=p4/>, то урл должен быть вида:

http://hybrid2.vesta.wkglobal.com/delegate/scion/document/html/docidvalue?provider=Kluwer32&p3=value3&p2=value2&p4=value4

  Ответить  
 
 автор: АЯ   (05.08.2011 в 14:09)   письмо автору
 
   для: SK   (05.08.2011 в 11:43)
 

Несколько вопросов:

1. А какая разница для PHP-скрипта между ?р1=value1&p2=value2 и ?р2=value2&p1=value1 ?
По-любому, разбирая $_GET, получите p1=value1 и p2=value2, в каком бы порядке эти пары имя=значение в QUERY_STRING не находились.

2. Ежели всё же вам очень важен порядок ввода этих пар (если в PHP разбирать будете не $_GET, а $_SERVER['QUERY_STRING']), то здесь вопрос в следующем: положим, клиент обнаружит, что сделал ошибку в предыдущем ("первом") текстовом поле и вернётся туда для исправления после заполнения следующего ("второго") поля? Исправляемое поле теперь полагать "вторым" или таки "первым"? :-)
-----

В общем, резюмирую - вы поставили перед собою бредовую (бессмысленную) задачу.
Тратить своё время на исполнение ваших извращений никто не будет.

И вам этого же желаю!

  Ответить  
 
 автор: SK   (05.08.2011 в 16:27)   письмо автору
 
   для: АЯ   (05.08.2011 в 14:09)
 

Не буду уподобаться некоторым из соображений нравственности. Это я про "бредовую" и "извращенную" задачу. Просто скажу, что если вы не в курсе чего-либо, то не нужно делать поспешных выводов, додумывать чего-то.

PHP не юзаю. А данное решение нужно для тестирования apache rewrite rules, тема была создана в соседней ветке Apache.


По делу. Вот что нужно заимплементить.

Создается 4 функции типа
addLinkField1.onkeyup = function () {...
addLinkField2.onkeyup = function () {...
addLinkField3.onkeyup = function () {...
addLinkField4.onkeyup = function () {...

В каждой из функций параметры типа p4=value4 добавляются в конец JS массива, если данные из текущего текстового поля удаляются, то элемент из массива так же удаляется. Таким образом, в массиве будут элементы расположены в том порядке, в котором они вводятся, а в конце функции нужно пробегажаться циклом по этому массиву и сформировать строку, которую нужно добавить в хвост урла.

Прошу помочь реализовать это на js. Исходный док прикреплен выше. Попрошу отвечать только по делу!

  Ответить  
 
 автор: АЯ   (05.08.2011 в 17:36)   письмо автору
 
   для: SK   (05.08.2011 в 16:27)
 

1. На вопрос нумер 2 из предыдущего поста вы так и не ответили.
А он принципиально важен.

2. Ввод в текстовое поле с клавиатуры - он единственно возможный?
А если клиент сделает копи-пасте? Это отслеживать надо?

  Ответить  
 
 автор: SK   (05.08.2011 в 17:48)   письмо автору
 
   для: АЯ   (05.08.2011 в 17:36)
 

1) Первым. Но если это сложнее, чем если бы вторым, то можно и вторым.
2) Копи-паст возможен.

  Ответить  
 
 автор: АЯ   (05.08.2011 в 19:39)   письмо автору
 
   для: SK   (05.08.2011 в 17:48)
 

<body>
<s>Предыдущий контент</s><br><br><br>

<div id="flds">
<b>p1:</b> <input id="FIRST" ><p><!-- id's могут быть какие угодно -->
<b>p2:</b> <input id="SECOND"><p>
<b>p3:</b> <input id="THIRD" ><p>
<b>p4:</b> <input id="FOURTH">   <!-- количество инпутов в контейнере div id="flds"произвольно -->
</div>
<hr>
<a id="lnk" href="http://hybrid2.com?provider=Kluwer32">http://hybrid2.com?provider=Kluwer32</a>

<script>
function mFunc (evt)
{
var e = window.event || evt, obj = e.target || e.srcElement;
if (Fid [obj.id] < 0) Fid [obj.id] = Num++;
Val [Fid [obj.id]] = obj.id + '=' + encodeURIComponent (obj.value);
for (var tmp = [], qs = '', j = k = 0, lj = Inp.length; j < lj; j++)
if (Val [j] && Val [j].split ('=') [1]) tmp [k++] = Val [j];
with (document.getElementById ('lnk')) href = innerHTML = Url + '&' + tmp.join ('&');
}

var Inp = document.getElementById ('flds').getElementsByTagName ('input'),
Val = new Array (Inp.length), Fid = new Array (Inp.length),
Num = 0, Url = document.getElementById ('lnk').href;
for (var j = 0, lj = Inp.length; j < lj; j++)
   {
   if (window.addEventListener) Inp [j].addEventListener ('input', mFunc, false);
   else Inp [j].attachEvent ('onpropertychange', mFunc, false); Fid [Inp [j].id] = -1;
   }
</script>

<br><br><br><s>Последующий контент</s>
</body>

  Ответить  
 
 автор: SK   (05.08.2011 в 20:11)   письмо автору
 
   для: АЯ   (05.08.2011 в 19:39)
 

Жму руку! Спасибо громадное. То, что нужно!!!

  Ответить  
 
 автор: АЯ   (05.08.2011 в 20:39)   письмо автору
 
   для: SK   (05.08.2011 в 20:11)
 

Махонькое исправление:
with (document.getElementById ('lnk')) href = innerHTML = Url + ((k) ? ('&' + tmp.join ('&')) : '');
Чтобы лишний амперсанд не "висел", если все инпуты будут очищены.

  Ответить  
 
 автор: SK   (05.08.2011 в 20:42)   письмо автору
 
   для: АЯ   (05.08.2011 в 20:39)
 

Да, подправил.
Буду разбираться, ибо написано профессионально :)

  Ответить  
 
 автор: SK   (08.08.2011 в 17:35)   письмо автору
 
   для: АЯ   (05.08.2011 в 20:39)
 

-

  Ответить  
 
 автор: SK   (11.08.2011 в 19:55)   письмо автору
 
   для: SK   (08.08.2011 в 17:35)
 

Есть такой код:

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body id="theBody">
<img align="center"  src="images/logo.png"/>
<br><br>
<div id="flds">
<table width="500">
  <tr>
    <td align="left" colspan="2">Document Link generator for <a target="blank" href="http://hybrid2.vesta.wkglobal.com">hybrid2.vesta.wkglobal.com</a></td>
  </tr>
  <tr>
    <td>CIP identifier:</td>
    <td><input id="cip" size="50" type="text"></td>
  </tr>
  <tr>
    <td>Document identifier:</td>
    <td><input id="d" size="50" type="text"></td>
  </tr>
  <tr>
    <td>View mode:</td>
    <td><input id="v" size="50" type="text"></td>
  </tr>
  <tr>
    <td>Highlighted terms 1:</td>
    <td><input id="h1" size="50" type="text"></td>
  </tr>
  <tr>
    <td>Highlighted terms 2:</td>
    <td><input id="h2" size="50" type="text"></td>
  </tr>
</table>
</div>
<br>
<br>
<select id="slt" onChange='mFunction(this.value)'>
  <option value="http://vesta.wkglobal.com/display?">http://vesta.wkglobal.com/display?</option>
  <option value="http://hybrid.vesta.wkglobal.com/display?">http://hybrid.vesta.wkglobal.com/display?</option>
  <option value="http://hybridacc.kluwer.nl/display?">http://hybridacc.kluwer.nl/display?</option>
  <option value="http://hybridtest01.kluwer.nl/display?">http://hybridtest01.kluwer.nl/display?</option>
  <option value="http://hybridtest02.kluwer.nl/display?">http://hybridtest02.kluwer.nl/display?</option>
  <option value="http://hybrid.kluwer.nl/display?">http://hybrid.kluwer.nl/display?</option>
</select>

<a id="lnk" target="blank" href="http://vesta.wkglobal.com/display?">http://vesta.wkglobal.com/display?</a>

<script>
function mFunction (host) {
var lnk = document.getElementById('lnk');
lnk.setAttribute("href", host);
lnk.innerHTML = host;
Url = host;
mFunc();
}

function mFunc (evt)
{
var e = window.event || evt, obj = e.target || e.srcElement;
if (Fid [obj.id] < 0) Fid [obj.id] = Num++;
Val [Fid [obj.id]] = obj.id + '=' + encodeURIComponent (obj.value);
for (var tmp = [], qs = '', j = k = 0, lj = Inp.length; j < lj; j++)
if (Val [j] && Val [j].split ('=') [1]) tmp [k++] = Val [j];
with (document.getElementById ('lnk')) href = innerHTML = Url + ((tmp.length) ? ('&' + tmp.join ('&')) : '');
}

var Num = 0, Inp = document.getElementById ('flds').getElementsByTagName ('input'),
Val = new Array (Inp.length), Fid = new Array (Inp.length), Url = document.getElementById ('lnk').href;
for (var j = 0, lj = Inp.length; j < lj; j++)
   {
   if (window.addEventListener) Inp [j].addEventListener ('input', mFunc, false);
   else Inp [j].attachEvent ('onpropertychange', mFunc, false);
   Fid [Inp [j].id] = -1;
   }
</script>
</body>
</html>


Как исправить, чтобы при вводе значений в инпуты и соответственно формировании URL'а, не было первого &?

  Ответить  
 
 автор: АЯ   (11.08.2011 в 20:50)   письмо автору
 
   для: SK   (11.08.2011 в 19:55)
 

Замените соответствующую строку на:
with (document.getElementById ('lnk')) href = innerHTML = Url + ((k) ? tmp.join ('&') : '');

Кроме того, можете убрать лишнее -
for (var tmp = [], qs = '', j = k = 0, lj = Inp.length; j < lj; j++)


------
Кроме того, обращаю внимание, что использование ОДНИХ и ТЕХ ЖЕ значений для имен переменных и ID - это ОЧЕНЬ непрофессионально. Я про var lnk = document.getElementById ('lnk'); - lnk на странице УЖЕ есть (как ID элемента). Неужто "буковок" не хватило, чтобы написать, например, var myLnk?

Поясняю примером. Запустите в любом браузере:
<html>
<body onload="alert (lnk.innerHTML)">
<a id="lnk" href="#">Моя ссылка</a>
</body>
</html>

Как видите, переменная с именем lnk - которое определено как ID тега - она УЖЕ есть.

  Ответить  
 
 автор: SK   (14.08.2011 в 19:58)   письмо автору
 
   для: АЯ   (11.08.2011 в 20:50)
 

Спасибо!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования