Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Кнопка-ссылка с передачей параметра (https://javascript.ru/forum/dom-window/31101-knopka-ssylka-s-peredachejj-parametra.html)

Alex7778 27.08.2012 08:29

Кнопка-ссылка с передачей параметра
 
Добрый день.
Возникла проблема при написании формы, прошу помочь! :)

<form action="go.php" id="myform">
<a href="javascript: document.nocredit.submit ()" onclick="submit();" >param 1</a>
<a href="javascript: document.nocredit.submit ()" onclick="submit();" >param 2</a>
</form>

Необходимо сделать так, чтобы при нажатии на ссылку "param 1" передавалось значение 1, а при нажатии на ссылку "param 2" передавалось значение 2.

bes 27.08.2012 09:04

<form action="http://javascript.ru" method="get">
	<a href="#">param 1</a>
	<a href="#" >param 2</a>
	<input type="hidden" name="inp">
</form>

<script>
window.onload = function () {
	document.forms[0].onclick = function (e)  {
		e = e || event;
		var target = e.target || e.srcElement;
		if (target.tagName == 'A') {
			if (target == this.children[0]) {
				this.inp.value = 1;
			} else {
				this.inp.value = 2;
			}
			alert(this.inp.value)
			this.submit();
		}
	}
}
</script>

Alex7778 27.08.2012 20:08

Спасибо.
Работает как надо, но мне необходимо, чтобы скрипт находился в отдельном файле. Я помещаю скрипт в файле script.js:

window.onload = function () {
document.forms[0].onclick = function (e) {
e = e || event;
var target = e.target || e.srcElement;
if (target.tagName == 'A') {
if (target == this.children[0]) {
this.inp.value = 1;
} else {
this.inp.value = 2;
}
alert(this.inp.value)
this.submit();
}
}
}

И запускаю код:

<form action="go.php" method="get">
<a href="#">param 1</a>
<a href="#" >param 2</a>
<input type="hidden" name="inp">
</form>
<script type="text/javascript" src="script.js"></script>

Таким образом не работает.
Подскажите пожалуйста как решить проблему.

bes 27.08.2012 20:17

Вроде всё чётко, у меня этот код работает, смотрите в консоль может ошибка где-то случайно закралась (лишний символ и т.п.)

Deff 27.08.2012 20:18

Alex7778,
У Вас на странице форма - единственная ?

bes 27.08.2012 20:24

window.onload также не позволяет задания в нескольких местах, работает только код в последнем

Alex7778 28.08.2012 01:21

Deff, да, форма одна. Тестирую именно этот код, который приведён как пример. Ничего другого на странице нет.

bes, если скрипт и html-код в одном файле, то работает всё как надо. Если скрипт вывожу в отдельный файл, то не работает. Синтаксических ошибок нет.

Может есть другие решения?

Deff 28.08.2012 01:41

Alex7778,
Дайте ссылку на тестовую страницу - аш интригует

Alex7778 28.08.2012 05:48

Deff, в коде была нелепая ошибка - неправильный путь к файлу скрипта. После её исправления Всё заработало.

Однако у меня в коде используются переменные типа name[nameid].
Когда я вместо inp подставляю name[nameid], то скрипт не работает.
Вот пример нерабочего скрипта:

window.onload = function () {
document.forms[0].onclick = function (e) {
e = e || event;
var target = e.target || e.srcElement;
if (target.tagName == 'A') {
if (target == this.children[0]) {
this.name[nameid].value = 1;
} else {
this.name[nameid].value = 2;
}
alert(this.name[nameid].value);
this.submit();
}
}
}

html-код:

<form action="go.php" method="get">
<a href="#">param 1</a>
<a href="#" >param 2</a>
<input type="hidden" name="name[nameid]">
</form>

bes 28.08.2012 08:32

Для оформления кода используйте bb-теги ([html run]) http://javascript.ru/formatting

name="name[nameid]" - в скобках не переменная, объясняйте подробнее, чего и как пытаетесь добиться

Alex7778 29.08.2012 12:02

Хорошо, буду использовать bb-теги.
name[nameid] - переменная в smarty.

bes 29.08.2012 12:31

Не знаю как там в smarty, но вот пример как переменные php добавляются в html-код
$a = 'yes';
$str = '<button onclick = "clicks(\'' . $a . '\')">click</button>';
echo $str;

function clicks(value) {
	alert(value);
}



тогда вообще без name
<form action="http://javascript.ru" method="get">
	<a href="#">param 1</a>
	<a href="#" >param 2</a>
	<input type="hidden" name="name[nameid]">
</form>

<script>
window.onload = function () {
	document.forms[0].onclick = function (e)  {
		var inp = this.children[2];//здесь получаем ссылку на input
		e = e || event;
		var target = e.target || e.srcElement;
		if (target.tagName == 'A') {
			if (target == this.children[0]) {
				inp.value = 1;
			} else {
				inp.value = 2;
			}
			alert(inp.value)
			this.submit();
		}
	}
}
</script>

Alex7778 29.08.2012 14:22

Хорошо, буду использовать bb-теги.
name[nameid] - переменная в темплейте, и исходный код вполне работает.
Строка взята из рабочего кода:
<input type="hidden" name="name[nameid]"  value="1">

При отправки формы, происходит передача параметра. В адресной строки я вижу:
go.php?name[nameid]=1

Alex7778 29.08.2012 14:26

Дело в том, что на страницу go.php необходимо передать значение параметра name[nameid]. Этот параметр нельзя изменить.

bes 29.08.2012 14:45

Цитата:

Сообщение от Alex7778
При отправки формы, происходит передача параметра. В адресной строки я вижу:
go.php?name[nameid]=1

это логично так как передача идёт методом get

Цитата:

Сообщение от Alex7778
Строка взята из рабочего кода:
<input type="hidden" name="name[nameid]"  value="1">

этот name и оставьте, последний js-код от него не зависит, сейчас подправлю

Alex7778 29.08.2012 16:37

Всё заработало! Большое спасибо.
Сразу возник такой вопрос. Дело в том, что каждая из кнопок должна состоять из двух частей (для того, чтобы назначить разные стили). Помогите пожалуйста усовершенствовать скрипт.

<form action="http://javascript.ru" method="get">
	<a href="#" class="style1">param 1</a><a href="#" class="style2">param 1</a>
	<a href="#" class="style1">param 2</a><a href="#" class="style2">param 2</a>
	<input type="hidden" name="name[nameid]">
</form>

bes 29.08.2012 16:58

<form action="http://javascript.ru" method="get">
	<a href="#" class="style1">param 1</a><a href="#" class="style2">param 1</a>
	<a href="#" class="style1">param 2</a><a href="#" class="style2">param 2</a>
	<input type="hidden" name="name[nameid]">
</form>

<script>
window.onload = function () {
	document.forms[0].onclick = function (e)  {
		var inp = this.children[this.children.length - 1];//здесь получаем ссылку на input
		e = e || event;
		var target = e.target || e.srcElement;
		if (target.tagName == 'A') {
			if (target == this.children[0] || target == this.children[1]) {
				inp.value = 1;
			} else {
				inp.value = 2;
			}
			alert(inp.value)
			this.submit();
		}
	}
}
</script>

Alex7778 29.08.2012 17:48

Всё получилось. Спасибо!


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