Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Хранить последний выбранный id (https://javascript.ru/forum/misc/14251-khranit-poslednijj-vybrannyjj-id.html)

grafin 08.01.2011 00:54

Хранить последний выбранный id
 
Всем привет, мучаюсь больше недели, уже устал - не получается!!

Грузится страница со множеством id. Когда жму на какой-то id, то он заменяется на поле формы(редактирую данные на странице), ввожу туда данные, жму на enter и всё сохраняется(ajax). Проблема в том, что если нажимать на поля и не "подтверждать" их enter'ом, то они так открытые и остаются. А нужно, чтобы на странице был открыт максимум один id (т.е. последний нажатый), а если нажать мимо (в любое пустое место, где нет никаких id), то открытый id скрывался бы (желательно, чтобы была возможность выполнить какую-то команду с закрывающимся id, например, в поле ввели значение, но не нажали enter(на enter повешена функция), а нажали мимо и функция всё-равно закрепилась.

Проблема состоит в том, что id динамические. Ну и знаний мало, но это последний штрих в готовом сайте, и не могу с этим справиться.

Помогите! :cray:
Заранее спасибо за советы, ссылки и тд.

monolithed 08.01.2011 01:34

Не уверен, что я вас правильно понял, то отправить форму по событию 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>

grafin 08.01.2011 14:10

Огромное спасибо, работа двинулась с мертвой точки!!

Только нужно немного модифицировать скрипт, и не знаю как:
<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");

Очень жду ответ!! Заранее спасибо!!

monolithed 08.01.2011 14:38

grafin, я же вам не спроста привел:
var form = document.forms['form'], input = form.elements[0]; //индекс элемента, это значит, что неважно какой будет идентификатор у поля ввода

grafin 08.01.2011 16:42

Но у меня нет обрамления <form ...>, я же его убрал. А убрал, потому что у меня подряд идут span со значениями, когда жму и появляется поле, то из одной строчки, получается столбик в 3 строчки, т.к. у формы отступы. Пробовал повесить на форму padding и margin - 0px, не помогает. Решил отказаться от формы, и выводить просто поле.

Вопрос остается: можно ли вообще в данном случае передать id поля и как?

monolithed 08.01.2011 17:13

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 имя

grafin 08.01.2011 17:46

Хм, попробовал посмотреть, идёт ли реакция, и ничего не движется..

<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>

monolithed 08.01.2011 17:51

<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

grafin 08.01.2011 18:45

Спасибо, но так работает, если на странице одно поле с таким названием. У меня формы для каждого значения на странице скрыты, и при нажатии открываются, а другой элемент закрывается. А здесь у всех одинаковый id получается, и обрабатывается только первая форма, которая на странице, остальные "ноль реакции".

Может можно как-то изменить первоначальный скрипт, там оставалось только подставить id, и у меня уже всё работало как надо...

x-yuri 08.01.2011 19:10

Цитата:

Сообщение от monolithed
1. по-умолчанию (на сколько я помню) у элемента form вообще нет никаких предопределенных стилей.

в ie7, например, есть. Просто форма тут не нужна. Да и к input'ам по id можно обращаться

grafin, о каких id речь и что вообще ты делаешь, расскажи подробнее про задачу...


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