|
 2.1 Кб |
|
| Здравствуйте!
Есть такая страница, см. атачмент.
Сейчас при вводе значения в инпут, формируется урл. Надо добавить ещё несколько инпутов, при вводе значений в которые, они (значения) должны добавляться к этому же урлу в том порядке, в котором они вводятся.
Могли бы показать как это реализовать?
Надо как-то брать все инпуты:
var addLinkField = document.getElementsByTagName('input')
|
и в цикле проверять:
for (var i=0;i<addLinkField.length;i++){...}
|
но все же не могу правильно заимплементить... | |
|
|
|
|
|
|
|
для: SK
(04.08.2011 в 20:40)
| | Народ, тут вообще кто-нибудь есть, способный помочь в решении проблемы?
(Несколько лет назад, форум был как-то поактивнее... Я тогда был по другим ником, не помню его, к сожалению, пришлось зарегаться под другим.) | |
|
|
|
|
|
|
|
для: SK
(04.08.2011 в 23:45)
| | Вам "добавлять" надо или же "проверять"? Или и то, и другое "в одном флаконе"?
Если "добавлять", то как? Простой конкатенацией, или использовать какие-то разделители?
Если "проверять", то по какому условию?
[поправлено модератором] | |
|
|
|
|
|
|
|
для: АЯ
(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 | |
|
|
|
|
|
|
|
для: 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']), то здесь вопрос в следующем: положим, клиент обнаружит, что сделал ошибку в предыдущем ("первом") текстовом поле и вернётся туда для исправления после заполнения следующего ("второго") поля? Исправляемое поле теперь полагать "вторым" или таки "первым"? :-)
-----
В общем, резюмирую - вы поставили перед собою бредовую (бессмысленную) задачу.
Тратить своё время на исполнение ваших извращений никто не будет.
И вам этого же желаю! | |
|
|
|
|
|
|
|
для: АЯ
(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. Исходный док прикреплен выше. Попрошу отвечать только по делу! | |
|
|
|
|
|
|
|
для: SK
(05.08.2011 в 16:27)
| | 1. На вопрос нумер 2 из предыдущего поста вы так и не ответили.
А он принципиально важен.
2. Ввод в текстовое поле с клавиатуры - он единственно возможный?
А если клиент сделает копи-пасте? Это отслеживать надо? | |
|
|
|
|
|
|
|
для: АЯ
(05.08.2011 в 17:36)
| | 1) Первым. Но если это сложнее, чем если бы вторым, то можно и вторым.
2) Копи-паст возможен. | |
|
|
|
|
|
|
|
для: 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>
|
| |
|
|
|
|
|
|
|
для: АЯ
(05.08.2011 в 19:39)
| | Жму руку! Спасибо громадное. То, что нужно!!! | |
|
|
|
|
|
|
|
для: SK
(05.08.2011 в 20:11)
| | Махонькое исправление:
with (document.getElementById ('lnk')) href = innerHTML = Url + ((k) ? ('&' + tmp.join ('&')) : '');
| Чтобы лишний амперсанд не "висел", если все инпуты будут очищены. | |
|
|
|
|
|
|
|
для: АЯ
(05.08.2011 в 20:39)
| | Да, подправил.
Буду разбираться, ибо написано профессионально :) | |
|
|
|
|
|
|
|
для: АЯ
(05.08.2011 в 20:39)
| | - | |
|
|
|
|
|
|
|
для: 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'а, не было первого &? | |
|
|
|
|
|
|
|
для: 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 тега - она УЖЕ есть. | |
|
|
|
|
|
|
|
для: АЯ
(11.08.2011 в 20:50)
| | Спасибо! | |
|
|
|