Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.07.2012, 16:56
Аспирант
Отправить личное сообщение для neWjs Посмотреть профиль Найти все сообщения от neWjs
 
Регистрация: 27.05.2012
Сообщений: 48

почему onclick срабатывает один раз
вот сам , код не могу понять почему onclick срабатывает только один раз.
ошибок в консоле нет..
(function(){
	var next_,search_,inp_s, inp_bt, prev_val, next_anc,prev_anc;
	
	 next_ = document.body.firstChild;
	 inp_s = document.getElementById("search");  
	 inp_bt = document.getElementById("find_s"); 
	 next_anc = document.getElementById('next_anc');
	 prev_anc = document.getElementById("prev_anc");
	/* 
	 next_anc.onclick = function(){fin.call(this,'next');}
	  prev_anc.onclick = function(){fin.call(this,'prev');}*/
	   
	   inp_bt.onclick = function(){//срабатывает один раз, на второй нечего не происходит
		   search_ = inp_s.value;
		   
		   if(search_ === prev_val || search_ == '')return;
		    alert('');
			setTimeout(return_back,0);
		     setTimeout(cls,0);
			
			prev_val = search_;
			
		   }
		/*   var j = 1;
		  function fin(param){
			//var fin = document.anchors;
			 // var len = fin.length;
			  alert();
			   if(param == 'next')j++;
			   else j--;
			  
			   this.href = '#'+j;
			 
			  } */
	   
	    function cls(){
		 var inner;
		
		 function search_condition(next){
		    
			 var n_type = next.nodeType;	 
			   var tag = next.tagName;
			  
			  if(tag =='SCRIPT'|| tag == 'STYLE'
			  || tag =="IMG" || tag == 'BR'
			   || tag =="INPUT" || next == inp_s.parentNode
			   || next == inp_s ) return false;
			  
			  if(n_type === 1){
				  inner = "innerHTML";
				    if(next[inner] === '')return false;
				  }
				  
			  if(n_type === 3){
				   inner = "data";
			
				   if(next[inner] == '\n')return false;
					   
					   
				  }	 
				
			 return true;
			 }
			 
			 var i = 0;
		   (function closers(){
			   console.log(next_.nodeName);
			if(search_condition(next_)){
			 var reg = new RegExp(search_,"ig");  
			next_[inner] = next_[inner].replace(reg, function(fin){
			i++;	
			return '<span name="'+i+'" class = "finded">'+fin+"</span>";
			});
			 }
		 
		 next_ = next_.nextSibling;
		 if(next_ !== null){
			 setTimeout(closers);
		} else {
			next_ = document.body.firstChild;
		     i = 0;
		}
	
		  }());
		
		   
		 	};
	
	function return_back (){
		
		var finded_el = document.getElementsByClassName("finded");
		  console.log(finded_el);
		  var el, text,el_parent; 
		for(var i = finded_el.length;i--;){
			
			el = finded_el[i];
			
			 el_parent = el.parentNode;
			  text = el.innerHTML;
			
			el.insertAdjacentHTML("afterEnd",text);
			  el_parent.removeChild(el);
			}
		}
	    
	}());

тут код полностью http://learn.javascript.ru/play/g13rJ + хтмл(полная страница рабочая)
Заранее спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 06.07.2012, 17:03
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

neWjs,
ставьте атрибут onclick прямо на тег

Дело в том что у Вас элементы идут с идентичным id и которые вы потом ремовите - или форму просто скрывайте display:none - нафига уничтожать и создавать ?
Ответить с цитированием
  #3 (permalink)  
Старый 06.07.2012, 17:06
Аспирант
Отправить личное сообщение для neWjs Посмотреть профиль Найти все сообщения от neWjs
 
Регистрация: 27.05.2012
Сообщений: 48

сорри не уточнил что он делает он ищет по странице фразы введенные в инпут. он очищает от предыдущего поиска перед новым
Ответить с цитированием
  #4 (permalink)  
Старый 06.07.2012, 17:27
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от neWjs
он очищает от предыдущего поиска перед новым
value='' при новом клике
форму ставите сразу на страницу с display:none при клике очистка value='' и display:block
Ответить с цитированием
  #5 (permalink)  
Старый 06.07.2012, 17:30
Аспирант
Отправить личное сообщение для neWjs Посмотреть профиль Найти все сообщения от neWjs
 
Регистрация: 27.05.2012
Сообщений: 48

Сообщение от Deff Посмотреть сообщение
value='' при новом клике
форму ставите сразу на страницу с display:none при клике очистка value='' и display:block
т.е на время поиска убрать инпут?
не совсем понял зачем?
Ответить с цитированием
  #6 (permalink)  
Старый 06.07.2012, 17:35
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от neWjs
т.е на время поиска убрать инпут?
не совсем понял зачем?
нет очистка инпут это и есть очистка value т.е document.getElementById("inputId/придайте ему id/").value=''
Ответить с цитированием
  #7 (permalink)  
Старый 06.07.2012, 17:41
Аспирант
Отправить личное сообщение для neWjs Посмотреть профиль Найти все сообщения от neWjs
 
Регистрация: 27.05.2012
Сообщений: 48

если вы имели ввиду так , то бесполезно уже пробывал
inp_bt.onclick = function(){//срабатывает один раз, на второй нечего не происходит
		   search_ = inp_s.value;
		   inp_s.value ='';//clear
		   if(search_ === prev_val || search_ == '')return;
		    alert('');
			setTimeout(return_back,0);
		     setTimeout(cls,0);
			
			prev_val = search_;
			
		   }
Ответить с цитированием
  #8 (permalink)  
Старый 06.07.2012, 17:45
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

neWjs,
Неть
Это что у Вас делает ?
101 el.insertAdjacentHTML("afterEnd",text);
102 el_parent.removeChild(el);
Ответить с цитированием
  #9 (permalink)  
Старый 06.07.2012, 17:51
Аспирант
Отправить личное сообщение для neWjs Посмотреть профиль Найти все сообщения от neWjs
 
Регистрация: 27.05.2012
Сообщений: 48

сначала скрипт ищет переданную фразу на странице , потом оборачивает в <span name="'+i+'" class = "finded">'+fin+"</span>, перед новым поиском нужно убрать все span ,но перед тем как удалить спан нужно достать из него значение

function return_back (){
  var finded_el = document.getElementsByClassName("finded");
          console.log(finded_el);

          var el, text,el_parent;

        for(var i = finded_el.length;i--;){
            el = finded_el[i];//найденный элемент 
             el_parent = el.parentNode;
              text = el.innerHTML;//получаем его значение перед тем как удалить его для нового поиска
             
            el.insertAdjacentHTML("afterEnd",text);//insertAdjacentHTML - вставляет значение элемента после него
              el_parent.removeChild(el);// удаляет спан
            }
        }
Ответить с цитированием
  #10 (permalink)  
Старый 06.07.2012, 17:58
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

neWjs,
поставьте обработчик прямо на тег

<input onclick="Fun_1" type="button" id="find_s" value="поиск">
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ajax запрос срабатывает только один раз из цикла.. SunYang AJAX и COMET 3 30.10.2011 16:01
onclick в IE не срабатывает по второму разу abstract Events/DOM/Window 1 23.08.2011 11:02
Выполнить только один раз событие onClick. exBill Events/DOM/Window 3 04.10.2010 23:04
Почему функция срабатывает один раз? Bogdan808 Javascript под браузер 4 06.09.2010 23:41
Почему событие срабатывает один раз? igsavenko jQuery 6 03.03.2010 09:26