Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2018, 00:33   #1
Огонек
Новичок
Джуниор
 
Регистрация: 25.09.2018
Сообщений: 2
По умолчанию Скрипт не видит объект

Здравствуйте
Есть простейшее окно с элементом select и парой кнопок. Список в select большой. Решил добавить поле для поиска. Для этого вставил поле для поиска id="find_input" и js-скрипт.
Код:
<script type="text/javascript">
	function find_customer(cust_name) {
//		alert('Работает');
		$('#firma_id option').each(function(){
			if (cust_name.toUpperCase() === this.text.toUpperCase()) {
				this.show();
			} else {
				this.hide();
			}	
		});
//		alert('Работает');
 	}
</script>
<?php
	$cust_list = null;
	foreach($cust_list_query as $one_cust) {
		if ($one_cust['my_name'] <> '') {
			$cust_list .= '<option value="'.$one_cust['id_customer'].'"  >'.$one_cust['my_name'].'</option>'; 
		}	
	}
	$firma_id = ' <select name="firma_id" id="firma_id" size="43" style="width:330px; display: inline-block;" >
	<option value="0" >Выбрать</option> '.$cust_list.'</select>';

	echo '
	<p><b>Импорт заявки покупателя</b></p>
	<input type="text" placeholder="Поиск ..." id="find_input" onkeypress="find_customer(this.value)" >

	<form action="" method="post" enctype="multipart/form-data">
		<b>Выберите покупателя</b>
		<br/>
		'.$firma_id.'
		<br/>
		<b>Выберите файл Excel</b>
		<br/>
		<input type="file" name="filename" size="15" />
		<br/>
		<br/>
		<input type="hidden" name="update" value="OK" />
		<input type="submit" value="Загрузить" />
		<br/>
	</form>';
?>
Почему-то он (скрипт) не работает: если снять комментирование с Алертов, то первый срабатывает, а второй нет. Следовательно работа скрипта прекращается где-то между ними. Буду благодарен за помощь
Огонек вне форума Ответить с цитированием
Старый 25.09.2018, 08:09   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

https://learn.javascript.ru/devtools
https://learn.javascript.ru/debugging-chrome
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 25.09.2018, 09:15   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Огонек Посмотреть сообщение
Почему-то он (скрипт) не работает: если снять комментирование с Алертов, то первый срабатывает, а второй нет.
приведённый Вами пример будет работать только при наличии загруженного jQuery.
Вы, надеюсь, выше приведённого фрагмента кода, загружаете jQuery ?

подключил jQuery, увидел, что проблема в другом - код валится на
this.hide();

Последний раз редактировалось Serge_Bliznykov; 25.09.2018 в 09:21.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.09.2018, 09:31   #4
Огонек
Новичок
Джуниор
 
Регистрация: 25.09.2018
Сообщений: 2
По умолчанию

На половину с проблемой разобрался, изменил код вот так
Код:
	function find_customer(cust_name) {
		var os = document.getElementById('firma_id');
		var i;
		for (i=0; i<os.length; i++) {
			if (os[i].text.startsWith(cust_name.toUpperCase()) ) {
				os[i].style.display='block';
			} else {
				os[i].style.display='none';
			}	
		};
 	}
Все работает, однако поиск (точнее уже сказать фильтрация) работает только по первой букве введенного в поле слова. Т.е. если ввести "а", то в select отображаются только элементы, начинающиеся на "а". А если ввести "ан", то список пуст, хотя Антонов и Андреев в списке есть.
?
Огонек вне форума Ответить с цитированием
Старый 25.09.2018, 10:05   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

у Вас keypress отрабатывает раньше, чем изменяется текст ввода (выведите в отладчике cust_name, чтобы убедиться в этом).

скажите, а не хотите в корне поменять подход?
взять, например jQuery плагин UI Autocomplete ?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.09.2018, 10:22   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

если не хотите взять готовый плагин, то посмотрите вот этот код (он немножко корявый, но, вроде бы, рабочий):

Код:
<head>
  <meta charset="utf-8">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>
<script type="text/javascript">
	function find_customer(cust_name) {
		$('#firma_id > option').each(function(){
			$otext = this.text.toUpperCase();
			$o = $('#firma_id option[value="' + this.value + '"]')
			if ($otext.startsWith(cust_name)) {
				$o.show();
			} else {
				$o.hide();
			}	
		});
 	}
    $(document).ready(function() {
        $('#find_input').on('input',  function(){
		var test_input = $.trim($('#find_input').val().toUpperCase());
		find_customer(test_input);
        });
    });

</script>
<?php
	$cust_list = null;
	$cust_list_query = array( array(id_customer => 'id_001', my_name=>'fu'), 
		array(id_customer => 'id_002', my_name=>'nut'),
		array(id_customer => 'id_003', my_name=>'Fury'),
		array(id_customer => 'id_004', my_name=>'NAN')
);
	foreach($cust_list_query as $one_cust) {
		if ($one_cust['my_name'] <> '') {
			$cust_list .= '<option value="'.$one_cust['id_customer'].'"  >'.$one_cust['my_name'].'</option>'; 
		}	
	}
	$firma_id = ' <select name="firma_id" id="firma_id" size="43" style="width:330px; display: inline-block;" >
	<option value="0" >Выбрать</option> '.$cust_list.'</select>';

	echo '
	<p><b>Импорт заявки покупателя</b></p>
	<input type="text" placeholder="Поиск ..." id="find_input" >

	<form action="" method="post" enctype="multipart/form-data">
		<b>Выберите покупателя</b>
		<br/>
		'.$firma_id.'
		<br/>
		<b>Выберите файл Excel</b>
		<br/>
		<input type="file" name="filename" size="15" />
		<br/>
		<br/>
		<input type="hidden" name="update" value="OK" />
		<input type="submit" value="Загрузить" />
		<br/>
	</form>';
?>
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ChromeDriver не видит элементы. А GeckoDriver видит. DedPerded Общие вопросы Web 2 17.08.2018 12:22
Спарсить то что видит снифер, но не видит браузер... FleXik Общие вопросы Delphi 8 11.12.2012 00:44
Perl - скрипт не видит переменные из пакета Max1548 Perl 6 02.03.2012 15:13
скрипт не видит cookie Seran4ek PHP 3 17.10.2011 23:42
Класс не видит обЪект Borland C++ Builder firefox0013 C++ Builder 11 01.10.2009 17:30