Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.11.2010, 14:18
Кандидат Javascript-наук
Отправить личное сообщение для lolka84 Посмотреть профиль Найти все сообщения от lolka84
 
Регистрация: 23.08.2010
Сообщений: 123

Баг или проблема в другом ?
Добрый день.
Имеем форму и 2 простые функции:
<form method='get' name='slctsm'>
      <select id='chsm' onChange='listsm(this);'>
        <option selected style="color:#C60">Выберите тип</option>
        <?php
		  $querytypesm = mysql_query("SELECT `id`,`typepoln` FROM `userstype`") or die(mysql_error());
		    while ($array_typesm = mysql_fetch_assoc($querytypesm)) { 
		      echo "<option value='".$array_typesm['id']."'>".$array_typesm['typepoln']."</option>";
		    }
		  mysql_free_result($querytypesm);	    
	    ?>
      </select>
    </form>

function listsm(list) {
  var selection = list.options[list.selectedIndex].value;
    if (selection != "None") {
      var xmlHttp = new XMLHttpRequest();
      var url = "/smt/sm/listsm.php?typesm="+escape(selection);
      xmlHttp.open("GET", url, true);
      xmlHttp.send(null);
      xmlHttp.onreadystatechange = function() {
        if (xmlHttp.readyState == 4) {
          if (xmlHttp.status == 200) {
            var response = xmlHttp.responseText;
			//alert(response);
            document.getElementById("listsm").innerHTML = response;
	      }
        }
	  }
    }
}

function delsm() {
  var smdel = document.getElementsByTagName("input");
    for (var i=0; i<=smdel.length; i++) {
      if ((smdel[i].type == "checkbox") && (smdel[i].id == "smiddel")) {
        if (smdel[i].checked == true) {
	      if (confirm("Вы подтверждаете удаление сметы ?")) {
			var smdelid = smdel[i].value;
			var selopt = document.getElementById("chsm");
            var xmlHttp = new XMLHttpRequest();
            var url = "/smt/sm/listsm.php?delsm="+escape(smdelid);
            xmlHttp.open("GET", url, true);
            xmlHttp.send(null);
			return listsm(selopt);
	      }	        
		  else {
			smdel[i].checked = false;
	        return false;
	      }
		}
	  }
	}
}

Первая функция при выборе пункта в select получает данные со страницы-обработчика данных и выводит их в index.php, вторая, при выборе checkbox'a, передает значение переменной на ту же страницу-обработчик и передает управление 1й функции, которая подгружает обновленные данные.
Обнаружился баг: иногда данные не обновляются автоматом. Т.е. что происходит: кликаю на checkbox, на окно confirm отвечаю "да", скрипт выполняется. При этом данные не обновляются! Выберешь что-нибуть в select, вернешься на нужный пункт - все ок.
Повторяю, происходит это не каждый раз, а примерно один раз из 5ти попыток. Код курил много раз, ошибок не вижу, работать должно как часы. Грешил на кэш, чистил - результата не принесло. Браузер opera.
В чем может быть дело ?

з.ы. Проскочила мысль: а что если в схеме "Функц. 2 -> php скрипт, удаление записи -> Функц. 1" функция 1 срабатывает раньше, чем пхп выполняет нужные операции - это бы все обьясняло)
Ответить с цитированием
  #2 (permalink)  
Старый 02.11.2010, 18:58
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,582

1) Я бы не стал функцию и id html элемента называть одним именем: listsm
2) не вижу когда запускается функция delsm
Ответить с цитированием
  #3 (permalink)  
Старый 02.11.2010, 20:38
Кандидат Javascript-наук
Отправить личное сообщение для lolka84 Посмотреть профиль Найти все сообщения от lolka84
 
Регистрация: 23.08.2010
Сообщений: 123

micscr,
1. Прав, поправлю
2. delsm запускается при клике на checkbox, которые генерируются на странице-обработчике. Выглядит это так:
<input id='smiddel' type='checkbox' name='smiddel<?php echo $array_sm['id']; ?>' value='<?php echo $array_sm['id']; ?>' onclick='delsm();' />
Ответить с цитированием
  #4 (permalink)  
Старый 03.11.2010, 07:34
Кандидат Javascript-наук
Отправить личное сообщение для lolka84 Посмотреть профиль Найти все сообщения от lolka84
 
Регистрация: 23.08.2010
Сообщений: 123

Пробую поставить задержку:
setTimeout('listsm(selopt)', 1000);
- нечего не происходит. Что не так делаю ?

Последний раз редактировалось lolka84, 03.11.2010 в 07:46.
Ответить с цитированием
  #5 (permalink)  
Старый 03.11.2010, 07:47
Кандидат Javascript-наук
Отправить личное сообщение для lolka84 Посмотреть профиль Найти все сообщения от lolka84
 
Регистрация: 23.08.2010
Сообщений: 123

Без кавычек срабатывает без задержки
setTimeout(listsm(selopt), 1000);
Ответить с цитированием
  #6 (permalink)  
Старый 03.11.2010, 07:51
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,582

Сообщение от lolka84 Посмотреть сообщение
Пробую поставить задержку:
setTimeout('listsm(selopt)', 1000);
- нечего не происходит. Что не так делаю ?
selopt не будет существовать. Надо через глобальную переменную:
someVariable = selopt; // без var - глобальная
setTimeout('listsm(someVariable )', 1000);
Ответить с цитированием
  #7 (permalink)  
Старый 03.11.2010, 08:24
Кандидат Javascript-наук
Отправить личное сообщение для lolka84 Посмотреть профиль Найти все сообщения от lolka84
 
Регистрация: 23.08.2010
Сообщений: 123

Отлично, спасибо)
Глюк, описанный в 1м посте, вроде как пропал, догадка походу была верная
micscr, плюсик вам)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
30(1|2) редирект от сервера. Или как лучше сделать редирект при верной отсылке форма. pizzZ AJAX и COMET 2 18.02.2010 09:06
Это баг do{}while или что? regesh jQuery 10 15.02.2010 00:28
Баг с jpeg в ie6 JsLoveR Элементы интерфейса 20 28.01.2010 20:57
Проблема с onBlur! или со мной) Ted Общие вопросы Javascript 3 08.07.2009 20:29
Странность при вычислении выражений.. Это баг или фича? krvwd Общие вопросы Javascript 9 28.01.2009 18:04