передача данных из сложной формы [способы реализации]
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(el) {
alert(el.value);
}
<input type="checkbox" onClick="change(this)">
немогу править хтмл. Немогу в функцию что-то передать. надо что бы сама определяла id елемента
О чем я и говорил. Почему-то автора это не устраивает
Вообще, насколько я помню, тебе будут посылаться только значения yes, т.к. нечекнутый чекбокс, при сабмите формы на сервер, ничего не передает.
немогу править хтмл. Немогу в функцию что-то передать. надо что бы сама определяла id елементахакаешь что ли чтото?
никогда не встречал решения, чтобы не передавая ничего в функцию можно было бы узнать что было нажато
может придумаем как это по-другому сделать не используя onClick
Блин, ребят! Ну есть код, который работает в ишаке
id=window.event.srcElement.id;. Хочу точно тоже самое, но работающее в FF! Как?
C этим я наебался в своё время пиздец как. Поэтому при нажатии меняю значение value, а перед сабмитом пробегаю все чекбоксы и "зажигаю" их, что бы значения передавали (иначе я хъуй массив передаваемый разгребу). Сложно короче всё там.чего за бред?
первый раз ТАКОЕ вижу
на серваке проверяешь пришло значение или нет
если не пришло - значит uncheked
нафига городить такую ерунду?
могу предложить такой вариант: добавить листенер на событие через DOM
здесь примеры:
http://lojjic.net/script-library/IEtoW3C-test.html
тойсть ты добавишь к своему чекбоксу обработчик события
и в нем укажешь параметры
Есть 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, в котором перечисляются обьекты, которые надо показывать.
Переделать этот для нескольких текстовых полей и чекбоксов - дело техники.
пример 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);
// записываем в файл
}
}
2) Во вторых в твоём примере, если checkbox не отмечен, он не перешлётся и в массиве мешанина будет
Рябят! Неотмеченный чекбок НЕПЕРДАЁТСЯ!
1) Нихрена это не массив будет! Для массива надо "name[]" писать.1) это именно массив и будет!
2) Во вторых в твоём примере, если checkbox не отмечен, он не перешлётся и в массиве мешанина будет
Рябят! Неотмеченный чекбок НЕПЕРДАЁТСЯ!
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] (собственно что меняем) может неоказаться данных чекбоксов
Это я понимаю, ты расскажи лучше как такой переданный массив разгребать
Никак. У тебя неправильные пчелы, дающие неправильный мед.
1. Обнулить все предыдущие значения
2. Поменять те значения, которые указаны в массиве на еденичку.
[name] [id] [what]
нафига вообще получал их
зачем писать сложно и неправильно, если можно просто и правильно?
может все таки дашь кусок кода
или хотя бы скажешь на каком языке пишешь
<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.
поясни строчку
не понимаю какая строчка в таблице изменится
если сделать так:
UPDATE tablename SET name='name'
то изменятся ВСЕ строчки в таблице
это явно не то что нужно...
mysql_query("UPDATE ".$row["edit"]." SET ".$what."='".addslashes($name)."' WHERE id='".$id."'")or die("Database error!: ".mysql_error;
просто по оператору Update можно понять структуру БД и тогда можно дать тебе правильный код и указать ошибки в твоем
помоему это не верно
параметры могут перемешаться и тогда твой код будет сохранять полнейший бред
Если ты предложишь мне код обработчика (нне на 10 страниц, а компактного) работающего с данными пришедшими в разнобой - респект и пиво тебе обеспечено
$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="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-код
проблемы неотсылания НЕТУ
как можно избавиться оттого чего и так нету?
в моем коде такой проблемы нет в принципе
он короче твоего в разы
а для юзверей сидящих на модеме короткий код - это главное
Завтра попробую реализовать.
Слуша, я повтыкал, ты прав по ходу!блин
Завтра попробую реализовать.
ну что ты за человек
ты никогда не слушаешь что тебе говорят?
это не я прав
это правы все программисты мира
все так делают
я никогда не задумывался лучший ли это способ или нет
но он по любому лучше твоего
function onClick(evt)
{
if (_isIe)
var id = getId(event.srcElement.id);
else
var id = getId(evt.target.id);
alert(id);
}
Обрати внимание, что нужно в обработчике указать имя переменной события для FireFox.
вы не читали предыдущие посты?
он же сказал: ему хочется чтобы у функции не было параметров
а так сделать невозможно
как сделать с передачей параметра evt в функцию - это и так всем понятно
Оставить комментарий
Ivan826
на onclick checkbox'a повешена такая функцияВ ишаке работает, в лисе - нет
Пишет window.event has no properties
Как правильно?