08.01.2011, 00:54
|
Новичок на форуме
|
|
Регистрация: 08.01.2011
Сообщений: 6
|
|
Хранить последний выбранный id
Всем привет, мучаюсь больше недели, уже устал - не получается!!
Грузится страница со множеством id. Когда жму на какой-то id, то он заменяется на поле формы(редактирую данные на странице), ввожу туда данные, жму на enter и всё сохраняется(ajax). Проблема в том, что если нажимать на поля и не "подтверждать" их enter'ом, то они так открытые и остаются. А нужно, чтобы на странице был открыт максимум один id (т.е. последний нажатый), а если нажать мимо (в любое пустое место, где нет никаких id), то открытый id скрывался бы (желательно, чтобы была возможность выполнить какую-то команду с закрывающимся id, например, в поле ввели значение, но не нажали enter(на enter повешена функция), а нажали мимо и функция всё-равно закрепилась.
Проблема состоит в том, что id динамические. Ну и знаний мало, но это последний штрих в готовом сайте, и не могу с этим справиться.
Помогите!
Заранее спасибо за советы, ссылки и тд.
|
|
08.01.2011, 01:34
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
Не уверен, что я вас правильно понял, то отправить форму по событию onblur можно так:
<script type="text/javascript">
window.onload = function(){
var form = document.forms['form'], input = form.elements[0];
input.onfocus = function(){
this.value = '';
};
input.onblur = function(){
this.value == '' && form.submit();
document.write('форма отправлена!');
};
};
</script>
<form name="form" action="" method="post">
<input type="text" value="click" />
</form>
|
|
08.01.2011, 14:10
|
Новичок на форуме
|
|
Регистрация: 08.01.2011
Сообщений: 6
|
|
Огромное спасибо, работа двинулась с мертвой точки!!
Только нужно немного модифицировать скрипт, и не знаю как:
<script type="text/javascript">
window.onload = function(){
var input = document.getElementById("gg");
input.onfocus = function(){
this.value = '';
};
input.onblur = function(){
this.value == '' && form.submit();
document.write('форма отправлена!');
};
};
</script>
<input id="gg" type="text" value="click" />
У меня просто поле, без обрамления form, т.к. съезжает дизайн. Основываюсь на id. Значение id у каждого поля разное (зависит от id в БД mysql). Как так сделать, чтобы это самое "gg", если оно будет "gg2", "gg84848484" и т.д. автоматически вставлялось в var input = document.getElementById("gg");
Очень жду ответ!! Заранее спасибо!!
|
|
08.01.2011, 14:38
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
grafin, я же вам не спроста привел:
var form = document.forms['form'], input = form.elements[0]; //индекс элемента, это значит, что неважно какой будет идентификатор у поля ввода
|
|
08.01.2011, 16:42
|
Новичок на форуме
|
|
Регистрация: 08.01.2011
Сообщений: 6
|
|
Но у меня нет обрамления <form ...>, я же его убрал. А убрал, потому что у меня подряд идут span со значениями, когда жму и появляется поле, то из одной строчки, получается столбик в 3 строчки, т.к. у формы отступы. Пробовал повесить на форму padding и margin - 0px, не помогает. Решил отказаться от формы, и выводить просто поле.
Вопрос остается: можно ли вообще в данном случае передать id поля и как?
|
|
08.01.2011, 17:13
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
grafin
1. по-умолчанию (на сколько я помню) у элемента form вообще нет никаких предопределенных стилей.
2. оберните input любым элементом.
document.getElementById("div").getElementsByTagName('input')[0].onblur = function(){
request.send(urlEncodeData(data)); //тут вызываем функцию отправки данных на сервер
};
<div id="div"><input type="text" value="click" /></div>
в это случае можно вообще не назначать элементу input имя
Последний раз редактировалось monolithed, 08.01.2011 в 17:16.
|
|
08.01.2011, 17:46
|
Новичок на форуме
|
|
Регистрация: 08.01.2011
Сообщений: 6
|
|
Хм, попробовал посмотреть, идёт ли реакция, и ничего не движется..
<script language="javascript" type="text/javascript">
document.getElementById("div").getElementsByTagName('input')[0].onblur = function(){
//request.send(urlEncodeData(data)); //тут вызываем функцию отправки данных на сервер
alert('result');
};
</script>
<div id="div"><input type="text" value="click" /></div>
|
|
08.01.2011, 17:51
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
<div id="div"><input type="text" value="click" /></div>
<script type="text/javascript">
document.getElementById("div").getElementsByTagName('input')[0].onblur = function(){
alert('result');
};
</script>
либо использовать onload / DOMContentLoaded
|
|
08.01.2011, 18:45
|
Новичок на форуме
|
|
Регистрация: 08.01.2011
Сообщений: 6
|
|
Спасибо, но так работает, если на странице одно поле с таким названием. У меня формы для каждого значения на странице скрыты, и при нажатии открываются, а другой элемент закрывается. А здесь у всех одинаковый id получается, и обрабатывается только первая форма, которая на странице, остальные "ноль реакции".
Может можно как-то изменить первоначальный скрипт, там оставалось только подставить id, и у меня уже всё работало как надо...
Последний раз редактировалось grafin, 08.01.2011 в 18:57.
|
|
08.01.2011, 19:10
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Сообщение от monolithed
|
1. по-умолчанию (на сколько я помню) у элемента form вообще нет никаких предопределенных стилей.
|
в ie7, например, есть. Просто форма тут не нужна. Да и к input'ам по id можно обращаться
grafin, о каких id речь и что вообще ты делаешь, расскажи подробнее про задачу...
|
|
|
|