Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


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

Здравствуйте
Есть простейшее окно с элементом 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, 09:09   #2
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 16,969
Репутация: 3316

icq: 512-765
skype: alexp.frl
По умолчанию

https://learn.javascript.ru/devtools
https://learn.javascript.ru/debugging-chrome
Alex11223 на форуме   Ответить с цитированием
Старый 25.09.2018, 10:15   #3
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,321
Репутация: 5258
По умолчанию

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

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

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

На половину с проблемой разобрался, изменил код вот так
Код:

	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, 11:05   #5
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,321
Репутация: 5258
По умолчанию

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

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

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

Код:

<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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ChromeDriver не видит элементы. А GeckoDriver видит. DedPerded Общие вопросы Web 2 17.08.2018 13: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


00:32.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru