Как передать значение узла методом GET во фрейм ??
Здравствуйте! Прошу помощи...
Не могу заставить работать такую вот задумку: требуется передать текст из ячейки таблицы в переменную PHP для страницы в IFRAME т.е. сформировать вот такую конструкцию: <form target=FrameName action="../basket_preview.php?k=1&PHPSESSID=...>Чтоб потом поймать переменную "k" в виде $_GET['k'] на странице basket_preview.php Проблема: в явном виде такая конструкци работает - если просто прописать её так как есть. - То есть с этой стороны подвоха нет. - НО! Как только пытаюсь сформировать эту строку динамически, - всё -отбой. Имеется страница с ценой и выбором количества товара (убрал все лишнее): <FORM METHOD=POST TARGET=FrameName ACTION="javascript:AddGoods(document.getElementByID('kol').firstChild.nodeValue)"> <!-- вот эта часть (выше) не срабатывает--> <table> <tr> <td ID="kol"> <!-- это значение и требуется передать методом GET --> 1 </td> </tr> </table> <INPUT TYPE=HIDDEN NAME=tsena VALUE=<?echo $tsena?>> <INPUT TITLE="В корзину" TYPE=IMAGE NAME=tocart SRC=cart.gif> </FORM> Вот описание функции для формирования строки: <script type="text/javascript"> <!-- function AddGoods(k) { var x1="../basket_preview.php?k="; var x2=k; var x3="&PHPSESSID="; var x4="<?echo session_id()?>"; location.href=x1+x2+x3+x4; } //--> </script> Так значение должно приниматься другой страницей, которая отображается в IFRAME name=FrameName: if ( isset($_POST['tocart_x']) ) { $line=array(); $line['kol']=$_GET['k']; $_SESSION['summa'] += $_POST['tsena']*$_GET['k']; } В итоге при нажати на кнопку "В корзину" ровным счетом ничего не происходит... - $_GET['k'] - пустая... Заранее спасибо! |
неправильно:
document.getElementByID('kol').firstChild.nodeValue правильно: document.getElementByID('kol').innerHTML |
А мне ведь только цифру из ячейки передать надо. Тогда ведь не нужен innerHTML - ? Или я что-то не понимаю..
(сорри, я комментарий, наверное, выше чем требуется поставил) |
ну, так приведите к числу.
можно JS-ом, можно PHP на ыоруме можно редактировать сообщения. исправьте свое сообщение как вы считаете правильным. PS ваша конструкция ничего дополнительного не даст, потому что у вас там только одна текстовая нода PPS протупил с вашей функцией.она в принципе правильная.и вроде даже кросбраузерная.но ничего дополнительного она не даст по сравнению с innerHTML.более того, если у вас там окажутся "лишние" ноды(некоторые браузеры этим страдают), то работать перестанет |
Цитата:
<td onClick="ChangeKol('m',document.getElementById('kol').firstChild.nodeValue)"> - </td> function ChangeKol(str,k) { if ("m" != str) { k++; document.getElementById('kol').firstChild.nodeValue=k; } else { if (k > 1) { k=k-1; document.getElementById('kol').firstChild.nodeValue=k; } else return false; } } А вот строка для передачи не формируется.. |
вы забыли закрывающую фигурную скобку в функции
|
:) Добавил, спасибо.. Я ее уже после 1000-ной переделки кода потерял, наверное, все равно ничего не происходит...
При наведении мышки на кнопку "В корзину" в статусной строке отображается: javascript:AddGoods(document.getElementByID('kol') .firstChild.nodeValue) а должно, как я понимаю, отображаться, например: javascript:AddGoods(1) |
нет, не должно.
более того, ябы вам посоветовал воздержатся от применения псевдопротокола javascript: тем более в ACTION формы тут можно отлично обойтись без него |
Цитата:
|
например повесить на onclick кнопки
главное надо добавить в конец обработчика return false если обработчик вешаете прямо в атрибуте, то там же и пишите вконце return false |
Цитата:
|
А еще вопрос:
есть ли принципиальная разница в использовании "onClick=AddGoods(k)" и "javascript:AddGoods(k)" ?.. |
есь несколько:
во первых второй вариант является очень нежелательным и я не берусь предсказывать как он может себя вести в разных системах, будучи помещенным в action во-вторых, Обработчик события может предотвратить отпраку формы, в случае неправильного заполнения. в-третьих, обработчик на oncklick не сработает если вы нажмете Enter в форме(поэтому обычно используют событие onsubmit формы, которое сработает в данном случае, а не onclick формы.извнияюсь, что раньше не написал этого) к тому же использование событий, а не псевдо-протокола является хорошим тоном рпограмирования, ИМХО |
Ясно... я тоже устарел, похоже, как и "javascript:"... :)
И, похоже сам себе придумал сложности. Кажется, так будет проще: вместо <td ID="kol"> <!-- это значение и требуется передать методом GET --> 1 </td> вставлю: <td> <!-- это значение передать методом POST --> <input id=kol type=text name=k value=1 disabled border=0> </td> Вопрос: значение поля для изменения через скрипт будет доступно как document.getElementById('kol').nodeValue? Но это уже другая тема.... |
лучше элемент в HTML определить так:
<td> <!-- это значение передать методом POST --> <input id="kol" type="hidden" name="k" value="1" /> </td> получить доступ к его значению можно так: document.getElementById('kol').value PS обрамляйте содержимое атрибутов в двойные кавычки. это также правило хорошего тона, и помогает избежать определенных ошибок и проблем в будущем |
Часовой пояс GMT +3, время: 08:01. |