Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.01.2014, 15:49
Новичок на форуме
Отправить личное сообщение для loko Посмотреть профиль Найти все сообщения от loko
 
Регистрация: 15.01.2014
Сообщений: 5

Событие click срабатывает только при повторном нажатии (через ON)
вкратце, при вводе в input названия города всплывает окошко с подсказкой доступных городов, соответственно при клике на подсказку выбранный город записывается в input. Все работает, только после 2 клика по подсказке
<style>

.input_form { position:relative; float: left; width:387px;  margin-top:10px; height:50px;   }
.input_form input{ border: none; position:absolute; display:block; padding:0 5px; width:250px; line-height:23px; height:23px; font-family:Tahoma, Geneva, sans-serif; font-size:15px; background:#d9d9d9;}
.from_help { position:absolute; left:0; top:23px; border:1px solid #d9d9d9; padding:0 4px; width:250px; border-top:none; background:#fff; z-index:2; }



</style>

<div class="input_form"><input id="from" type="text" />
<div id="from_help" class="from_help "></div>
</div>

<script type="text/javascript" src="http://yandex.st/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">


var town_from = new Array(
    'Альметьевск',
    'Москва',
    'Армавир', 
    'Артем', 
    'Архангельск', 
    'Астрахань', 
    'Балаково', 
    'Барнаул', 
    'Белгород', 
    'Березники', 
    'Бийск', 
    'Благовещенск', 
    'Борисоглебск', 
    'Братск', 
    'Брянск', 
    'Буденновск', 
    'Великий Новгород', 
    'Владивосток', 
    'Волгоград', 
    'Волжский', 
    'Вологда', 
    'Воронеж', 
    'Дзержинск', 
    'Екатеринбург', 
    'Иваново', 
    'Ижевск', 
    'Иркутск', 
    'Йошкар-Ола', 
    'Казань', 
    'Калининград', 
    'Каменск-Уральский', 
    'Кемерово', 
    'Киров', 
    'Кострома', 
    'Краснодар', 
    'Красноярск', 
    'Курган', 
    'Курск', 
    'Липецк', 
    'Магнитогорск', 
    'Миасс', 
    'Мурманск', 
    'Набережные Челны'


) 

$(document).ready(function(){
    $("#from").on("keyup change", function(){  
        var str=$(this).val().toLowerCase();

		var from_result='';
		$('#from_help').empty();
        if ($(this).val() == '') {from_result ='<div class="nothing">ничего не найдено</div>';}
	    else 
        {
			  var count=0;
			   
			  for (i in town_from) 
				  {  
				  
				  if (count < 10) 
				     {      
					  var temp=town_from[i].toLowerCase();
					 
					  if (temp.indexOf(str)==0)
						  {
						  $('#from_help').append('<div class="add" >'+town_from[i]+'</div>');
						  count++;
						  } 
				     }
				  }
				
		   if (count < 10)
			  {
                 for (i in town_from) 
			        {     
				      if (count < 10) 
						     {      
						        var temp=town_from[i].toLowerCase();
                                if (temp.indexOf(str)!=-1)
					  			   {
                                    $('#from_help').append('<div class="add" >'+town_from[i]+'</div>');
							        count++;
					   			   } 
			 				 }
			         }  
			   }
		   if (count==0) {$('#from_help').append('<div class="nothing">ничего не найдено</div>');}

}
			 
   
	})
	


  
  
 })
 
 
 
$(document).ready(function(){
	
$('#from_help').on('click','.add',function () {
            
		     
			
			 $("#from").val($(this).text())
             $('#from_help').empty();
             alert ('working???');
        });		
})
 
 //   добавление  полей 

</script>

С чем это связано ?
Ответить с цитированием
  #2 (permalink)  
Старый 15.01.2014, 16:27
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от loko
С чем это связано ?
Анализировать нужно малое, так лучше видны твои проблемы

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
.input_form { position:relative; float: left; width:387px;  margin-top:10px; height:50px;   }
.input_form input{ border: none; position:absolute; display:block; padding:0 5px; width:250px; line-height:23px; height:23px; font-family:Tahoma, Geneva, sans-serif; font-size:15px; background:#d9d9d9;}
.from_help { position:absolute; left:0; top:23px; border:1px solid #d9d9d9; padding:0 4px; width:250px; border-top:none; background:#fff; z-index:2; }
</style>
<script type="text/javascript">
$(document).ready(function(){
    //$("#from").on("keyup",function(){  
    $("#from").on("keyup change",function(){  
		for (var i=0; i<3; i++) {
			$('#from_help').append('<div class="add">Item '+i+'</div>');
		};
	});
});
$(document).ready(function(){
	$('#from_help').on('click','.add',function () {
		 $("#from").val($(this).text())
		 $('#from_help').empty();
		 alert ('working???');
	});		
})
 //   добавление  полей 
</script>
</head>
<body>
<div class="input_form">
	<input id="from" type="text" />
	<div id="from_help" class="from_help "></div>
</div>
</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 15.01.2014, 16:39
Новичок на форуме
Отправить личное сообщение для loko Посмотреть профиль Найти все сообщения от loko
 
Регистрация: 15.01.2014
Сообщений: 5

Сообщение от ksa Посмотреть сообщение
Анализировать нужно малое, так лучше видны твои проблемы

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
.input_form { position:relative; float: left; width:387px;  margin-top:10px; height:50px;   }
.input_form input{ border: none; position:absolute; display:block; padding:0 5px; width:250px; line-height:23px; height:23px; font-family:Tahoma, Geneva, sans-serif; font-size:15px; background:#d9d9d9;}
.from_help { position:absolute; left:0; top:23px; border:1px solid #d9d9d9; padding:0 4px; width:250px; border-top:none; background:#fff; z-index:2; }
</style>
<script type="text/javascript">
$(document).ready(function(){
    //$("#from").on("keyup",function(){  
    $("#from").on("keyup change",function(){  
		for (var i=0; i<3; i++) {
			$('#from_help').append('<div class="add">Item '+i+'</div>');
		};
	});
});
$(document).ready(function(){
	$('#from_help').on('click','.add',function () {
		 $("#from").val($(this).text())
		 $('#from_help').empty();
		 alert ('working???');
	});		
})
 //   добавление  полей 
</script>
</head>
<body>
<div class="input_form">
	<input id="from" type="text" />
	<div id="from_help" class="from_help "></div>
</div>
</body>
</html>
работает, не спорю... но разница только в алгоритме добавления содержимого... но как оно влияет если в результате добавляется один и тот же код ???
Ответить с цитированием
  #4 (permalink)  
Старый 15.01.2014, 16:52
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

loko, ты видишь на моем примере, что у тебя дважды идет добавление городов?
Ответить с цитированием
  #5 (permalink)  
Старый 15.01.2014, 17:06
Новичок на форуме
Отправить личное сообщение для loko Посмотреть профиль Найти все сообщения от loko
 
Регистрация: 15.01.2014
Сообщений: 5

Сообщение от ksa Посмотреть сообщение
loko, ты видишь на моем примере, что у тебя дважды идет добавление городов?
тут даже не в двойной подборке городов дело, и не в алгоритме, а в простом использовании if - else конструкции ...
$(document).ready(function(){
    //$("#from").on("keyup",function(){  
    $("#from").on("keyup change",function(){  
		var str=$(this).val().toLowerCase();
		var from_result='';
		$('#from_help').empty();
		var test_bol=false;
        if (test_bol) {$('#from_help').append('<div class="add">ничего не найдено</div>');}
	    else 
		  {
		    for (var i=0; i<10; i++) {
			  $('#from_help').append('<div class="add">Item '+i+'</div>');
		    };
	      };
	});
});
- уже работает в 2 клика ... Так с чем это связано ? Это баг jQuery ?
Ответить с цитированием
  #6 (permalink)  
Старый 15.01.2014, 17:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

автодополнение

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
.input_form { position:relative; float: left; width:387px;  margin-top:10px; height:50px;   }
.input_form input{ border: none; position:absolute; display:block; padding:0 5px; width:250px; line-height:23px; height:23px; font-family:Tahoma, Geneva, sans-serif; font-size:15px; background:#d9d9d9;}
.from_help { position:absolute; left:0; top:23px; border:1px solid #d9d9d9; padding:0 4px; width:250px; border-top:none; background:#fff; z-index:2; }
</style>
<script>
$(document).ready(function () {
    function like(str) {
        var town_from = [
            'Альметьевск',
            'Москва',
            'Армавир',
            'Артем',
            'Архангельск',
            'Астрахань',
            'Балаково',
            'Барнаул',
            'Белгород',
            'Березники',
            'Бийск',
            'Благовещенск',
            'Борисоглебск',
            'Братск',
            'Брянск',
            'Буденновск',
            'Великий Новгород',
            'Владивосток',
            'Волгоград',
            'Волжский',
            'Вологда',
            'Воронеж',
            'Дзержинск',
            'Екатеринбург',
            'Иваново',
            'Ижевск',
            'Иркутск',
            'Йошкар-Ола',
            'Казань',
            'Калининград',
            'Каменск-Уральский',
            'Кемерово',
            'Киров',
            'Кострома',
            'Краснодар',
            'Красноярск',
            'Курган',
            'Курск',
            'Липецк',
            'Магнитогорск',
            'Миасс',
            'Мурманск',
            'Набережные Челны'
        ],
            html = '',
            str = new RegExp("^" + str, "i");
        for (var i = 0; i < town_from.length; i++) {
            if (str.test(town_from[i])) html += '<div class="add">' + town_from[i] + '</div>'
        }
        return html
    }
    $("#from").on("input", function () {
        var val = this.value;
        $('#from_help').html(val.length ? like(val) : '')
    });

    $('#from_help').on('click', '.add', function () {
        $("#from").val($(this).text())
        $('#from_help').html('');
    });
})
</script>
</head>
<body>
<div class="input_form">
	<input id="from" type="text" />
	<div id="from_help" class="from_help "></div>
</div>
</body>
</html>

Последний раз редактировалось рони, 15.01.2014 в 17:48.
Ответить с цитированием
  #7 (permalink)  
Старый 15.01.2014, 18:00
Новичок на форуме
Отправить личное сообщение для loko Посмотреть профиль Найти все сообщения от loko
 
Регистрация: 15.01.2014
Сообщений: 5

Сообщение от рони Посмотреть сообщение

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
.input_form { position:relative; float: left; width:387px;  margin-top:10px; height:50px;   }
.input_form input{ border: none; position:absolute; display:block; padding:0 5px; width:250px; line-height:23px; height:23px; font-family:Tahoma, Geneva, sans-serif; font-size:15px; background:#d9d9d9;}
.from_help { position:absolute; left:0; top:23px; border:1px solid #d9d9d9; padding:0 4px; width:250px; border-top:none; background:#fff; z-index:2; }
</style>
<script>
$(document).ready(function () {
    function like(str) {
        var town_from = [
            'Альметьевск',
            'Москва',
            'Армавир',
            'Артем',
            'Архангельск',
            'Астрахань',
            'Балаково',
            'Барнаул',
            'Белгород',
            'Березники',
            'Бийск',
            'Благовещенск',
            'Борисоглебск',
            'Братск',
            'Брянск',
            'Буденновск',
            'Великий Новгород',
            'Владивосток',
            'Волгоград',
            'Волжский',
            'Вологда',
            'Воронеж',
            'Дзержинск',
            'Екатеринбург',
            'Иваново',
            'Ижевск',
            'Иркутск',
            'Йошкар-Ола',
            'Казань',
            'Калининград',
            'Каменск-Уральский',
            'Кемерово',
            'Киров',
            'Кострома',
            'Краснодар',
            'Красноярск',
            'Курган',
            'Курск',
            'Липецк',
            'Магнитогорск',
            'Миасс',
            'Мурманск',
            'Набережные Челны'
        ],
            html = '',
            str = new RegExp("^" + str, "i");
        for (var i = 0; i < town_from.length; i++) {
            if (str.test(town_from[i])) html += '<div class="add">' + town_from[i] + '</div>'
        }
        return html
    }
    $("#from").on("input", function () {
        var val = this.value;
        $('#from_help').html(val.length ? like(val) : '')
    });

    $('#from_help').on('click', '.add', function () {
        $("#from").val($(this).text())
        $('#from_help').html('');
    });
})
</script>
</head>
<body>
<div class="input_form">
	<input id="from" type="text" />
	<div id="from_help" class="from_help "></div>
</div>
</body>
</html>
Спасибо, буду копать в сторону регулярных выражений.... Но почему все таки мой код не срабатывает с 1 раза ? Это баг jQuery или у меня касяк в коде ?
Ответить с цитированием
  #8 (permalink)  
Старый 15.01.2014, 22:05
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от loko
Но почему все таки мой код не срабатывает с 1 раза ? Это баг jQuery или у меня касяк в коде ?
Ну все ведь показал в своем примере... Убери событие change у инпута и все будет срабатывать с одного клика!
Ответить с цитированием
  #9 (permalink)  
Старый 16.01.2014, 10:35
Новичок на форуме
Отправить личное сообщение для loko Посмотреть профиль Найти все сообщения от loko
 
Регистрация: 15.01.2014
Сообщений: 5

Всем спасибо, разобрался
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Срабатывает нажатие на button при нажатии Enter внутри input rebeled Элементы интерфейса 19 07.02.2013 16:07
Событие для тега <div> при обращении к нему через якорь dima_web Элементы интерфейса 1 11.01.2013 18:38
AJAX запрос в Internet Explorer срабатывает через раз nikolayseo jQuery 5 13.11.2012 00:13
Проблемы с click() (не запускается при клике) hase jQuery 4 13.11.2010 22:25
Не срабатывает при отсутствии в теле документа yuriii jQuery 3 06.05.2010 17:45