передача данных из сложной формы [способы реализации]
change(event) ?
передавать ссылку на чекбокс и работать по ней
Да нет, надо просто определить id елемента, который вызвал эту функцию. Как?
ИЕ как всегда использует нестандартные вещи
правильно будет так
(код для отлова нажатия Ентер)
function change(f, e) {
var keycode;
if (window.event)
keycode = window.event.keyCode;
else if (e)
keycode = e.which;
else
return true;
if (keycode == 13) {
if(validateSearch(f
clickSearch(f);
}
return true;
}
а вот как вызывать:
onkeypress="return enterSearch(this.form, event)
правильно будет так
(код для отлова нажатия Ентер)
function change(f, e) {
var keycode;
if (window.event)
keycode = window.event.keyCode;
else if (e)
keycode = e.which;
else
return true;
if (keycode == 13) {
if(validateSearch(f
clickSearch(f);
}
return true;
}
а вот как вызывать:
onkeypress="return enterSearch(this.form, event)
если просто сам элемент нао, то зачем извращаться?
function change(el) {
alert(el.value);
}
<input type="checkbox" onClick="change(this)">
function change(el) {
alert(el.value);
}
<input type="checkbox" onClick="change(this)">
немогу править хтмл. Немогу в функцию что-то передать.
надо что бы сама определяла id елемента
надо что бы сама определяла id елементаО чем я и говорил. Почему-то автора это не устраивает
Вообще, насколько я помню, тебе будут посылаться только значения yes, т.к. нечекнутый чекбокс, при сабмите формы на сервер, ничего не передает.
немогу править хтмл. Немогу в функцию что-то передать. надо что бы сама определяла id елементахакаешь что ли чтото?
никогда не встречал решения, чтобы не передавая ничего в функцию можно было бы узнать что было нажато
лучше скажи что тебе нужно
может придумаем как это по-другому сделать не используя onClick
может придумаем как это по-другому сделать не используя onClick
C этим я наебался в своё время пиздец как. Поэтому при нажатии меняю значение value, а перед сабмитом пробегаю все чекбоксы и "зажигаю" их, что бы значения передавали (иначе я хъуй массив передаваемый разгребу). Сложно короче всё там.
Блин, ребят! Ну есть код, который работает в ишаке
Блин, ребят! Ну есть код, который работает в ишаке
id=window.event.srcElement.id;. Хочу точно тоже самое, но работающее в FF! Как?
C этим я наебался в своё время пиздец как. Поэтому при нажатии меняю значение value, а перед сабмитом пробегаю все чекбоксы и "зажигаю" их, что бы значения передавали (иначе я хъуй массив передаваемый разгребу). Сложно короче всё там.чего за бред?
первый раз ТАКОЕ вижу
на серваке проверяешь пришло значение или нет
если не пришло - значит uncheked
нафига городить такую ерунду?
если ты не можешь менять html
могу предложить такой вариант: добавить листенер на событие через DOM
здесь примеры:
http://lojjic.net/script-library/IEtoW3C-test.html
тойсть ты добавишь к своему чекбоксу обработчик события
и в нем укажешь параметры
могу предложить такой вариант: добавить листенер на событие через DOM
здесь примеры:
http://lojjic.net/script-library/IEtoW3C-test.html
тойсть ты добавишь к своему чекбоксу обработчик события
и в нем укажешь параметры
Предложи мне иную схему решения такой задачи:

Есть n элементов выводимые построчно. У них есть некие параметры. Из этих параметров 2 типа имя и checkbox долны менятся по нажатию кнопки изменить. То есть по нажатию на checkbox сабмита быть не долджно, по нажитю "Энтер" должно передаваться в фаил, и там менятся всё содержимое checkbox'ов и полей "имя" у всех n элементов. При этом полей "имя" и checkbox'ов может быть не по одному, как на примере, а несколько.

Есть n элементов выводимые построчно. У них есть некие параметры. Из этих параметров 2 типа имя и checkbox долны менятся по нажатию кнопки изменить. То есть по нажатию на checkbox сабмита быть не долджно, по нажитю "Энтер" должно передаваться в фаил, и там менятся всё содержимое checkbox'ов и полей "имя" у всех n элементов. При этом полей "имя" и checkbox'ов может быть не по одному, как на примере, а несколько.
Для конкретно приведенного примера
<inpu type="text" name="name1"> <input type="checkbox" name="show" value="name1"><br>
<inpu type="text" name="name2"> <input type="checkbox" name="show" value="name2"><br>
<inpu type="text" name="name3"> <input type="checkbox" name="show" value="name3"><br>
В результате передается 3 переменные name1, name2, name3 и массив show, в котором перечисляются обьекты, которые надо показывать.
Переделать этот для нескольких текстовых полей и чекбоксов - дело техники.
<inpu type="text" name="name1"> <input type="checkbox" name="show" value="name1"><br>
<inpu type="text" name="name2"> <input type="checkbox" name="show" value="name2"><br>
<inpu type="text" name="name3"> <input type="checkbox" name="show" value="name3"><br>
В результате передается 3 переменные name1, name2, name3 и массив show, в котором перечисляются обьекты, которые надо показывать.
Переделать этот для нескольких текстовых полей и чекбоксов - дело техники.
самый очевидный вариант такой:
пример HTML строчки для элемента:
пример, когда 2 имени и 2 чекбокса:
внизу странички:
<input type="submit" value="изменить">
первое число после подчеркивания означает Id элемента
второе число означает номер поля для этого элемента
теперь обработчик на сервере:
(пишу схематически, потому как не было сказано какой язык)
пример HTML строчки для элемента:
<tr><td>
Edit <input type="text" name="name_1_1">
<input type="checkbox" name="show_1_1">
</td></tr>
пример, когда 2 имени и 2 чекбокса:
<tr><td>
Edit <input type="text" name="name_1_1">
<input type="checkbox" name="show_1_">
Edit <input type="text" name="name_1_2">
<input type="checkbox" name="show_1_2">
</td></tr>
внизу странички:
<input type="submit" value="изменить">
первое число после подчеркивания означает Id элемента
второе число означает номер поля для этого элемента
теперь обработчик на сервере:
(пишу схематически, потому как не было сказано какой язык)
// size - количество элементов
for(id=1; id <= size; id++) {
int size1 = 5; // количество полей для этого элемента
for(num = 1; num <= size1; num++) {
String name = getParameter("name_" + id + "_" + num);
boolean isChecked = (getParameter("chk_" + id + "_" + num) != null);
// записываем в файл
}
}
1) Нихрена это не массив будет! Для массива надо "name[]" писать.
2) Во вторых в твоём примере, если checkbox не отмечен, он не перешлётся и в массиве мешанина будет
Рябят! Неотмеченный чекбок НЕПЕРДАЁТСЯ!
2) Во вторых в твоём примере, если checkbox не отмечен, он не перешлётся и в массиве мешанина будет
Рябят! Неотмеченный чекбок НЕПЕРДАЁТСЯ!
1) Нихрена это не массив будет! Для массива надо "name[]" писать.1) это именно массив и будет!
2) Во вторых в твоём примере, если checkbox не отмечен, он не перешлётся и в массиве мешанина будет
Рябят! Неотмеченный чекбок НЕПЕРДАЁТСЯ!
2) да не перешлется но при этом никакой мешанины не будет
да!
НЕ ПЕРЕДАЕТСЯ
кто с этим спорит?
но НАХРЕНА его передавать?
ни на одно сайте он не передается а у тебя передается
НАХРЕНА?
если не передался - значит НЕ ОТМЕЧЕН
1) Это будет таки массив
2) Повторяю для неумеющих читать - это будет масив с именами тех текстовых полей, которые надо показывать. Если имени текстового поля в массиве нет, значит показывать его не надо.
Если даже такого обьяснения тебе мало, то я уж прямо и не знаю, как еще обьяснить
2) Повторяю для неумеющих читать - это будет масив с именами тех текстовых полей, которые надо показывать. Если имени текстового поля в массиве нет, значит показывать его не надо.
Если даже такого обьяснения тебе мало, то я уж прямо и не знаю, как еще обьяснить
тагда научи глупого как разгребать массив вида
Array ( [name] => Array ( [0] =>раздел [1] => yes [2] => ещё один [3] => off [4] => третий [5] => yes ) [id] => Array ( [0] => 3 [1] => 3 [2] => 2 [3] => 2 [4] => 1 [5] => 1 ) [what] => Array ( [0] => name [1] => view [2] => name [3] => view [4] => name [5] => view ) [query] => edit=text&parent=0 )
в котором в помассиве [what] (собственно что меняем) может неоказаться данных чекбоксов
Array ( [name] => Array ( [0] =>раздел [1] => yes [2] => ещё один [3] => off [4] => третий [5] => yes ) [id] => Array ( [0] => 3 [1] => 3 [2] => 2 [3] => 2 [4] => 1 [5] => 1 ) [what] => Array ( [0] => name [1] => view [2] => name [3] => view [4] => name [5] => view ) [query] => edit=text&parent=0 )
в котором в помассиве [what] (собственно что меняем) может неоказаться данных чекбоксов
Это я понимаю, ты расскажи лучше как такой переданный массив разгребать
Никак. У тебя неправильные пчелы, дающие неправильный мед.
оч. просто
1. Обнулить все предыдущие значения
2. Поменять те значения, которые указаны в массиве на еденичку.
1. Обнулить все предыдущие значения
2. Поменять те значения, которые указаны в массиве на еденичку.
как ты получил данные массивы?
[name] [id] [what]
нафига вообще получал их
зачем писать сложно и неправильно, если можно просто и правильно?
может все таки дашь кусок кода
или хотя бы скажешь на каком языке пишешь
[name] [id] [what]
нафига вообще получал их
зачем писать сложно и неправильно, если можно просто и правильно?
может все таки дашь кусок кода
или хотя бы скажешь на каком языке пишешь
Ок. Вот форма (уже сгенерённая)
вот JavaScript
вот обработчик (change.php)
Язык - PhP.
<form onsubmit="check_checkboxes;" action="actions/change.php" method="post" style="display: inline">
<table border="0" cellpadding="1" cellspacing="0" style="font-size: 11px;margin: 0px; padding:0px;">
<tr><tr><tr><td><a href="actions/change_prior.php?edit=text&act=fullup&id=3"><img style="border: none;" alt="" title="Вверх до конца" src="images/fullup.gif"></a></td>
<td><a href="actions/change_prior.php?edit=text&act=up&id=3"><img style="border: none;" alt="" title="Вверх" src="images/up.gif"></a></td>
<td><a href="actions/change_prior.php?edit=text&act=down&id=3"><img style="border: none;" alt="" title="Вниз" src="images/down.gif"></a></td>
<td><a href="actions/change_prior.php?edit=text&act=fulldown&id=3"><img style="border: none;" alt="" title="Вниз до конца" src="images/fulldown.gif"></a></td>
<td>
<a href="actions/del.php?id=3&query=edit=text&parent=0" class="del" title="Удалить элемент" onClick="if(!confirm('Вы хотите удалить элемент «павыавыh».\nВы уверены?'{return false;}">Del</a>
</td><td style="padding-left: 5px;">
<a href="?id=3&edit=text" title="Редактировать">Edit</a>
</td><td>
<input type="text" class="inp3" style="width: 200px;" title="элемента" name="name[]" maxlength="50" value="павыавыh">
<input type="hidden" name="id[]" value="3">
<input type="hidden" name="what[]" value="name">
</td><td class="text">
<input type="checkbox" name="name[]" id="1" onclick="change;" value="yes" checked>Показывать элемент
<input type="hidden" name="id[]" value="3">
<input type="hidden" name="what[]" value="view">
</td></tr><td><a href="actions/change_prior.php?edit=text&act=fullup&id=2"><img style="border: none;" alt="" title="Вверх до конца" src="images/fullup.gif"></a></td>
<td><a href="actions/change_prior.php?edit=text&act=up&id=2"><img style="border: none;" alt="" title="Вверх" src="images/up.gif"></a></td>
<td><a href="actions/change_prior.php?edit=text&act=down&id=2"><img style="border: none;" alt="" title="Вниз" src="images/down.gif"></a></td>
<td><a href="actions/change_prior.php?edit=text&act=fulldown&id=2"><img style="border: none;" alt="" title="Вниз до конца" src="images/fulldown.gif"></a></td>
<td>
<a href="actions/del.php?id=2&query=edit=text&parent=0" class="del" title="Удалить элемент" onClick="if(!confirm('Вы хотите удалить элемент «иваива».\nВы уверены?'{return false;}">Del</a>
</td><td style="padding-left: 5px;">
<a href="?id=2&edit=text" title="Редактировать">Edit</a>
</td><td>
<input type="text" class="inp3" style="width: 200px;" title="элемента" name="name[]" maxlength="50" value="иваива">
<input type="hidden" name="id[]" value="2">
<input type="hidden" name="what[]" value="name">
</td><td class="text">
<input type="checkbox" name="name[]" id="2" onclick="change;" value="off">Показывать элемент
<input type="hidden" name="id[]" value="2">
<input type="hidden" name="what[]" value="view">
</td></tr><td><a href="actions/change_prior.php?edit=text&act=fullup&id=1"><img style="border: none;" alt="" title="Вверх до конца" src="images/fullup.gif"></a></td>
<td><a href="actions/change_prior.php?edit=text&act=up&id=1"><img style="border: none;" alt="" title="Вверх" src="images/up.gif"></a></td>
<td><a href="actions/change_prior.php?edit=text&act=down&id=1"><img style="border: none;" alt="" title="Вниз" src="images/down.gif"></a></td>
<td><a href="actions/change_prior.php?edit=text&act=fulldown&id=1"><img style="border: none;" alt="" title="Вниз до конца" src="images/fulldown.gif"></a></td>
<td>
<a href="actions/del.php?id=1&query=edit=text&parent=0" class="del" title="Удалить элемент" onClick="if(!confirm('Вы хотите удалить элемент «Аля улю».\nВы уверены?'{return false;}">Del</a>
</td><td style="padding-left: 5px;">
<a href="?id=1&edit=text" title="Редактировать">Edit</a>
</td><td>
<input type="text" class="inp3" style="width: 200px;" title="элемента" name="name[]" maxlength="50" value="Аля улю">
<input type="hidden" name="id[]" value="1">
<input type="hidden" name="what[]" value="name">
</td><td class="text">
<input type="checkbox" name="name[]" id="3" onclick="change;" value="yes" checked>Показывать элемент
<input type="hidden" name="id[]" value="1">
<input type="hidden" name="what[]" value="view">
</td></tr>
</table>
<input type="hidden" name="query" value="edit=text&parent=0">
<br><input type="submit" class="submit" value="Изменить">
</form>
вот JavaScript
function check_checkboxes
{
for( var i = 1; i <= 3; i++ )
{
document.getElementById(i).checked=true;
}
}
function change
{
var srcElement;
id=window.event.srcElement.id;
if(document.getElementById(id).value=='yes')
{
document.getElementById(id).value='off';
}
else
{
document.getElementById(id).value='yes';
}
alert(document.getElementById(id).value);
}
вот обработчик (change.php)
foreach($_POST["id"] as $id)
{
$what=$_POST["what"][$i];
$name=$_POST["name"][$i];
mysql_query("UPDATE ".$row["edit"]." SET ".$what."='".addslashes($name)."' WHERE id='".$id."'")or die("Database error!: ".mysql_error;
$i++;
}
Язык - PhP.
mysql_query("UPDATE ".$row["edit"]." SET ".$what."='".addslashes($name)."'")or die("Database error!: ".mysql_error;
поясни строчку
не понимаю какая строчка в таблице изменится
если сделать так:
UPDATE tablename SET name='name'
то изменятся ВСЕ строчки в таблице
это явно не то что нужно...
поясни строчку
не понимаю какая строчка в таблице изменится
если сделать так:
UPDATE tablename SET name='name'
то изменятся ВСЕ строчки в таблице
это явно не то что нужно...
Блин, сорри, вырезал чуть больше лучайно
mysql_query("UPDATE ".$row["edit"]." SET ".$what."='".addslashes($name)."' WHERE id='".$id."'")or die("Database error!: ".mysql_error;
mysql_query("UPDATE ".$row["edit"]." SET ".$what."='".addslashes($name)."' WHERE id='".$id."'")or die("Database error!: ".mysql_error;
просто по оператору Update можно понять структуру БД и тогда можно дать тебе правильный код и указать ошибки в твоем
твой код основывается на том, что браузер пришлет параметры именно в том порядке в каком они написаны
помоему это не верно
параметры могут перемешаться и тогда твой код будет сохранять полнейший бред
помоему это не верно
параметры могут перемешаться и тогда твой код будет сохранять полнейший бред
А ты думаешь в чём смысл изъёба с чекбоксами? Как раз для того что бы данные пришли в нужном порядке. Они в нужном порядке и приходят, проверь.
Если ты предложишь мне код обработчика (нне на 10 страниц, а компактного) работающего с данными пришедшими в разнобой - респект и пиво тебе обеспечено
Если ты предложишь мне код обработчика (нне на 10 страниц, а компактного) работающего с данными пришедшими в разнобой - респект и пиво тебе обеспечено
почему нельзя вот эту строчку заменить на чтото такое:
$name=$_POST["name"][$i];
if($what == 'view' && $name == null)
$name = 'no';
таким образом будут обрабатываться неприходящие чекбоксы
(сорри, не помню синтаксиса ПХП, но думаю понятно что я имею ввиду)
$name=$_POST["name"][$i];
if($what == 'view' && $name == null)
$name = 'no';
таким образом будут обрабатываться неприходящие чекбоксы
(сорри, не помню синтаксиса ПХП, но думаю понятно что я имею ввиду)
тьфу блин
уже сам понял что так не выйдет
тьфу блин
нужно енто дело В КОРНЕ переписать
уже сам понял что так не выйдет
тьфу блин
нужно енто дело В КОРНЕ переписать
Предложи как! Я с радостью! Меня самого это парит, ибо на модемном коннекте юзверь видит после сабмита галки во всех чекбоксах, и его это этого подклинивает 

правильный код будет такой:
foreach($_POST["id"] as $id) {
$iName = $_POST["name_".$id];
$iView = $_POST["view_".$id];
if($iView == null)
$iView = 'no';
mysql_query("UPDATE ".$row["edit"]." SET name='".addslashes($iName)."', view='".addslashes($iView)." WHERE id='".$id."'")or die("Database error!: ".mysql_error;
$i++;
}
Нифига не получается - смещение значений произходит 

вот эту хренотень
<input type="text" class="inp3" style="width: 200px;" title="элемента" name="name[]" maxlength="50" value="Аля улю">
<input type="hidden" name="id[]" value="1">
<input type="hidden" name="what[]" value="name">
</td><td class="text">
<input type="checkbox" name="name[]" id="3" onclick="change;" value="yes" checked>Показывать элемент
<input type="hidden" name="id[]" value="1">
<input type="hidden" name="what[]" value="view">
заменяем на:
<input type="hidden" name="id[]" value="1">
<input type="text" class="inp3" style="width: 200px;" title="элемента" name="name_1" maxlength="50" value="Аля улю">
</td><td class="text">
<input type="checkbox" name="view_1" value="yes" checked>Показывать элемент
обрати внимание
мой код стал В РАЗЫ короче твоего
<input type="text" class="inp3" style="width: 200px;" title="элемента" name="name[]" maxlength="50" value="Аля улю">
<input type="hidden" name="id[]" value="1">
<input type="hidden" name="what[]" value="name">
</td><td class="text">
<input type="checkbox" name="name[]" id="3" onclick="change;" value="yes" checked>Показывать элемент
<input type="hidden" name="id[]" value="1">
<input type="hidden" name="what[]" value="view">
заменяем на:
<input type="hidden" name="id[]" value="1">
<input type="text" class="inp3" style="width: 200px;" title="элемента" name="name_1" maxlength="50" value="Аля улю">
</td><td class="text">
<input type="checkbox" name="view_1" value="yes" checked>Показывать элемент
обрати внимание
мой код стал В РАЗЫ короче твоего
я как раз сделал то что мы тебе и говорили
имеем хидден массив айдишников
<input type="hidden" name="id[]" value="1">
<input type="hidden" name="id[]" value="2">
<input type="hidden" name="id[]" value="3">
и имеем сами поля, в названиях которых указан айдишник
<input type="text" class="inp3" style="width: 200px;" title="элемента" name="name_1" maxlength="50" value="Аля улю">
<input type="checkbox" name="view_1" value="yes" checked>
<input type="text" class="inp3" style="width: 200px;" title="элемента" name="name_2" maxlength="50" value="Аля улю">
<input type="checkbox" name="view_2" value="yes" checked>
<input type="text" class="inp3" style="width: 200px;" title="элемента" name="name_3" maxlength="50" value="Аля улю">
<input type="checkbox" name="view_3" value="yes" checked>
имеем хидден массив айдишников
<input type="hidden" name="id[]" value="1">
<input type="hidden" name="id[]" value="2">
<input type="hidden" name="id[]" value="3">
и имеем сами поля, в названиях которых указан айдишник
<input type="text" class="inp3" style="width: 200px;" title="элемента" name="name_1" maxlength="50" value="Аля улю">
<input type="checkbox" name="view_1" value="yes" checked>
<input type="text" class="inp3" style="width: 200px;" title="элемента" name="name_2" maxlength="50" value="Аля улю">
<input type="checkbox" name="view_2" value="yes" checked>
<input type="text" class="inp3" style="width: 200px;" title="элемента" name="name_3" maxlength="50" value="Аля улю">
<input type="checkbox" name="view_3" value="yes" checked>
Ты убил некоторые вещи возникшие из-за модульности структуры (элементы строки набираются автоматически а от проблемы неотсылания так и не избавился
Ты убил некоторые вещи возникшие из-за модульности структуры (элементы строки набираются автоматически а от проблемы неотсылания так и не избавилсяя убил неверный код
в чем проблема набирать автоматически мой код?
где это я нарушил модульность?
я только удалил неверный(избыточный) html-код
проблемы неотсылания НЕТУ
как можно избавиться оттого чего и так нету?
в моем коде такой проблемы нет в принципе
он короче твоего в разы
а для юзверей сидящих на модеме короткий код - это главное
Слуша, я повтыкал, ты прав по ходу!
Завтра попробую реализовать.
Завтра попробую реализовать.
Слуша, я повтыкал, ты прав по ходу!блин
Завтра попробую реализовать.
ну что ты за человек
ты никогда не слушаешь что тебе говорят?

это не я прав
это правы все программисты мира
все так делают
я никогда не задумывался лучший ли это способ или нет
но он по любому лучше твоего

Есть такая штука:
Обрати внимание, что нужно в обработчике указать имя переменной события для FireFox.
function onClick(evt)
{
if (_isIe)
var id = getId(event.srcElement.id);
else
var id = getId(evt.target.id);
alert(id);
}
Обрати внимание, что нужно в обработчике указать имя переменной события для FireFox.
товарищ
вы не читали предыдущие посты?
он же сказал: ему хочется чтобы у функции не было параметров
а так сделать невозможно
как сделать с передачей параметра evt в функцию - это и так всем понятно
вы не читали предыдущие посты?
он же сказал: ему хочется чтобы у функции не было параметров
а так сделать невозможно
как сделать с передачей параметра evt в функцию - это и так всем понятно
Оставить комментарий
Ivan826
на onclick checkbox'a повешена такая функцияВ ишаке работает, в лисе - нет
Пишет window.event has no properties
Как правильно?