Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Заполнение полей поочередно 
:(
    Опции темы
Innuendo
Дата 15.1.2006, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 24.12.2005
Где: Молдова

Репутация: 2
Всего: 6



У меня есть двумерный массив в виде таблицы.
Он создаётся пустым.
Размер задаёт пользователь
У меня есть функция заполнения:
Пользователь нажимает на ячейку - выплывает инпут, заводит значение, нажимает ентер, и значение находится в ячейке.

Мне надо ввести быстрое заполнение.
То есть пользователь нажимает на кнопку, и у него всплывают ячейки по очереди от элемента 1-1 до конечного элемента m-n.
У меня почему-то выходит что нажав на кнопку, скрипт открывает по очереди все эти всплывающие дивы с инпутами ( и мгновенно закрывает) и только последний ты можешь редактировать.
Сам массив двумерный в виде таблицы.
Вот код функций:
Код

function edit(e,id){                  //функция открытия дива с инпутом    
var oDiv = document.getElementById('mydiv');           //этот див будет всплывать (в нём input находится)
var newtxt = document.getElementById("new")         // это инпут 
oDiv.style.top = e.clientY;                                            //ставим див под мышкой пользователя(над ячейкой)
oDiv.style.left= e.clientX;
oDiv.style.display=""                                                    //делаем див видным
newtxt.value = ""                                            //очищаем див (просто мозилла сохраняет старые значения)
newtxt.focus();                                               //даём курсор в инпут            
newtxt.onkeydown =  function(e){                //при нажатии на enter -  filllin(id)
if (e) event=e
if (event.keyCode==13){
     fillin(id);
}
}
}  

function fillin(idn){                                                               //Функция заполенения в ячейку
var oDiv = document.getElementById('mydiv');                   //этот див будет всплывать
var oTd = document.getElementById(idn)                       //это ячейка в которой будет внесено значение(td)
var newtxt = document.getElementById("new").value       //инпут, из которого считывается данные
if (newtxt!=""){
oTd.innerHTML = newtxt                                                      
oDiv.style.display="none";
}
else {hideD()}
}

hideD() просто скрывает див.
Тут самого заполнения в массив пока нету, ну это не столь важно просто.
Мне надо чтоб при нажатии на кнопку QuickFill начинались заполянтся элементы от первого до последнего.
как это можно осуществить?



--------------------
=)
PM MAIL ICQ Jabber   Вверх
Alx
Дата 15.1.2006, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



Innuendo
выложи весь код, с html вместе, не очень понятна суть пробелмы...


--------------------
PM MAIL WWW ICQ   Вверх
12345c
Дата 16.1.2006, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Наверное, при нажатии на кнопку действует event.keyCode==13, и цикл пробегается весь. Сделай где-то в начале event.returnValue , чтобы закончить событие.


--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
Innuendo
Дата 16.1.2006, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 24.12.2005
Где: Молдова

Репутация: 2
Всего: 6



да, я понял что проблема с event'ами...
Может у кого-то есть хорошая литературка по ним? тут есть темка, но не особо понял.
Alx
Весь код - там путаница, большой, и это.. я без комментов почти пишу smile фиг разберешь
Суть в том, что как сделать так, чтоб он шел по циклу к следующему элементу только когда пользователь заполнили предыдущий.
Код

<html>
<head>
<style>
.table_matrix {
cursor:pointer; 
text-align: center; 
border: 1px solid #345487; 
background-color:#FFFFFF;
padding:0; 
margin:0;
}

</style>
<title>MATRIX</title>
</head>
<body onload = "matrix_resize()">
<script type="text/javascript">
<!--   
function matrix_resize(){
var w = document.getElementById("t_matrix").offsetWidth
var h = document.getElementById("t_matrix").offsetHeight
var left = parseInt((screen.availWidth/2) - (w/2));
var top = parseInt((screen.availHeight/2) - (h/2));
h+=70;
w+=25;
window.resizeTo(w,h);
window.moveTo(left,top);
}
var i,j
var chk = opener.document.getElementById("check").value
if (chk=='empty') {
var a= opener.document.getElementById("row1").value
var b= opener.document.getElementById("col1").value
}
else if (chk=='random') {
var a= opener.document.getElementById("row2").value
var b= opener.document.getElementById("col2").value
var d1 = parseInt(opener.document.getElementById("d1").value)
var d2 = parseInt(opener.document.getElementById("d2").value)
}
var idnomer=""
 var m = new Array(a);
  for (i=0; i<a; i++) {
 m[i]= new Array(b)
 }
 //Функция для авто-заполнения матрицы вручную  - вот, пока не работает :(
 /*
 function autoFillEdit(i,j){
 var mid = i+"_"+j;
  var oDiv = document.getElementById('mydiv'); 
  var newtxt = document.getElementById("new");
  var oTd = document.getElementById(mid);
  var table= document.getElementById("t_matrix");
  oDiv.style.top = oTd.offsetHeight/2 + oTd.offsetTop + table.offsetTop;
  oDiv.style.left= oTd.offsetWidth/2 + oTd.offsetLeft + table.offsetLeft;
  oDiv.style.display=""
  newtxt.value = ""
  newtxt.focus();
  newtxt.onkeydown =  function(e){
  if (e) event=e
  if (event.keyCode==13){
     fillin2(i,j);
}
}

   }
   */
//Функция показывает на див с полем текста
function edit(e,id){     
var oDiv = document.getElementById('mydiv'); 
var newtxt = document.getElementById("new")
oDiv.style.top = e.clientY;
oDiv.style.left= e.clientX;
oDiv.style.display=""
newtxt.value = ""
newtxt.focus();
newtxt.onkeydown =  function(e){
if (e) event=e
if (event.keyCode==13){
     fillin(id);
}
}
}  
//Функция применяет изменения в ячейке матрицы
function fillin(idn){
var oDiv = document.getElementById('mydiv'); 
var oTd = document.getElementById(idn)
var newtxt = document.getElementById("new").value
if (newtxt!=""){
oTd.innerHTML = newtxt
oDiv.style.display="none";
}
else {hideD()}
}
/*
function fillin2(m,n){
var oDiv = document.getElementById('mydiv'); 
var oTd = document.getElementById(idn)
var newtxt = document.getElementById("new").value
if (newtxt!=""){
oTd.innerHTML = newtxt
oDiv.style.display="none";
 m++; n++
autoFillEdit(m,n);
}
else {hideD()}
}
*/

//Прячем див
function hideD(){
document.getElementById('mydiv').style.display="none"
}

//Функция рэндома
function randomNumber(limit){
  return Math.floor(Math.random()*limit);
}
// Построение пустой матрицы (в значения индексы)
if (chk=="empty"){
document.writeln ('<table class="table_matrix" border=0 cellpadding=2 cellspacing=1 id= "t_matrix" align="center">');
document.writeln('<th style="background-color:#DFE6EF;" colspan='+b+'>'+opener.document.getElementById("name1").value+'</th>');
for (i=0; i<a; i++){
document.writeln('<tr style="background-color:#DFE6EF;">');
 for (j=0; j<b; j++) {
 m[i][j] = null
i++; j++;idnomer= i+"_"+j; // формируем id-номер
  document.write('<td id = "',idnomer,'"  onclick="edit(event,this.id)" onmouseover= "this.style.backgroundColor='#EEF2F7'" onMouseOut="this.style.backgroundColor=''"><font color="gray">('+i+','+j+')</font></td>');
  i--; j--;
  }
  document.writeln('</tr>');
  }
 }
 //Заполняем матрицу
 if (chk=="random") { //Матрица случайных чисел
 document.writeln ('<table  class="table_matrix" border=0 cellpadding=2 cellspacing=1 id= "t_matrix">');
 document.writeln('<th style="background-color:#DFE6EF;" colspan='+b+'>'+opener.document.getElementById("name2").value+'</th>');
 for (i=0; i<a; i++) {
 document.writeln('<tr style="background-color:#DFE6EF;">')
  for (j=0; j<b; j++) {
  m[i][j] = d1 + randomNumber (d2-d1+1);
  i++; j++;idnomer= i+"_"+j; i--; j--;  // формируем id-номер
   document.write('<td onmouseover= "this.style.backgroundColor='#EEF2F7'" onMouseOut="this.style.backgroundColor=''" id = "',idnomer,'" onclick="edit(event,this.id)">'+m[i][j]+'</td>');
  }
    document.writeln('</tr>');
 }
 document.writeln('</table>');
 }
//-->
</script>
<div id='mydiv' style="position: absolute; background-color: #af3842; display:none; border:solid 1px #af3842">
<input type="text" style= "border: 1px solid #006699" size= "2" id="new" onblur = "hideD()">
</div>   
</body>
</html>


Приаттачить файл не захотел smile

Это сообщение отредактировал(а) Innuendo - 16.1.2006, 16:36


--------------------
=)
PM MAIL ICQ Jabber   Вверх
12345c
Дата 16.1.2006, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Innuendo: Оно бы смешно, но эта заумная надстройка с разворачиванием цитаты с кодом на данном скрипте вешает браузер, потому что никак не может остановиться разворот по горизонтали. smile

Потом, пример имеет синт. ошибки, в районе стр.128: document.write('<td id = "',idnomer,'" onclick="edit(event,this.id)" onmouseover= this.style.backgro , а потом - не запускается, потому что должен открываться из другого окна.

Без запуска, вижу взаимный вызов autoFillEdit и fillin2 (в комментариях) - прекрасная возможность для зацикливания. Видимо, что-то с логикой выполнения. Нужно прервать этот цикл проверкой режима - ввода или отображения. Если ячейка (точнее, таблица вообще, т.к. редактируется 0 или 1 ячейка) в режиме ввода, то процесс идёт по ==13, если отображение - нет. (Это всё приблизительно, т.к. нет возможности запустить код.)


--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
Innuendo
Дата 17.1.2006, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 24.12.2005
Где: Молдова

Репутация: 2
Всего: 6



12345c
я тебе не совсем понял smile
просто этот код работать не будет, если его просто открыть. он же просит переменные с файла из которого открыли.
там выбирают тип создания дв. массива - задают размер (диапазон для рэндома) и он открывает матрицу в новом окошке.
Всё работает, только вот autoFill который я пока не работает занёс в комменты не пашет...
мне нужно сделать так чтоб он приступал к следующему элементу цикла, только тогда, когда ввели предыдущий... тту наверное удобней через while... и шаг цикла увеличится только когда введётся значение. Если получится напишу
(моя проблема только вот в этом autoFill)

какой у тебя браузер? я просто на Мозилла, и в ИЕ проверяю... работает без ерроров smile


--------------------
=)
PM MAIL ICQ Jabber   Вверх
12345c
Дата 17.1.2006, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Говорю, что кнопка "Развернуть код" конкретно над этим кодом барахлит в форуме (IE6).

А по алгоритму задачи я рассказал идею построения - цикл надо разрывать по специально определённой для этого переменной (режим - ввода/отображения данных).


--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
Innuendo
Дата 17.1.2006, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 24.12.2005
Где: Молдова

Репутация: 2
Всего: 6



Цитата(12345c @ 17.1.2006, 21:21 Найти цитируемый пост)

Говорю, что кнопка "Развернуть код" конкретно над этим кодом барахлит в форуме (IE6).

ааа smile понял, барахлит кнопка на этом форуме то есть. Ну я с этим не встречаюсь так как юзаю ФайрФокс smile

а про код да, можно и так.
Спасибо, буду пробывать.


--------------------
=)
PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0503 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.