Как передать значение узла методом 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, время: 20:12. |