Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 22.09.2023, 16:16
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

Сообщение от Sheratan
В добавленных сроках не работает поиск
Вот почему не спрашивать и не описывать задачу всю сразу. Со всеми особенностями. Как будто одно от другого не зависит
Тогда к table id добавить
<body>
<div>
<table id="table">
<tr>
    <td><input type="text" name="article[]" placeholder="article" /></td>
    <td><input type="text" name="name[]" placeholder="Name"  /></td>
    <td><input type="text" name="code[]" placeholder="Code"  /></td>
    <td><input type="text" name="ven[]"  placeholder="ven"  /></td>
</tr>
<tr>
    <td><input type="text" name="article[]" placeholder="article" /></td>
    <td><input type="text" name="name[]" placeholder="Name"  /></td>
    <td><input type="text" name="code[]" placeholder="Code"  /></td>
    <td><input type="text" name="ven[]"  placeholder="ven"  /></td>
</tr>
<tr>
    <td><input type="text" name="article[]" placeholder="article" /></td>
    <td><input type="text" name="name[]" placeholder="Name"  /></td>
    <td><input type="text" name="code[]" placeholder="Code"  /></td>
    <td><input type="text" name="ven[]"  placeholder="ven"  /></td>
</tr>
</table>
<ul id="result"></ul>
</div>


И событие input ловим на таблице и проверяем, что это нужный элемент (делегирование)
// Заполнение строки таблицы
// data - элемент массива данных
// tr - строка в которую был ввод
function outputInTable(data, tr) {
	const article = tr.querySelector('[name="article[]"]');
	article.value = data.article;
	const name = tr.querySelector('[name="name[]"]');
	name.value = data.name;
	name.readOnly = true;
	const code = tr.querySelector('[name="code[]"]');
	code.value = data.code;
	code.readOnly = true;
	const ven = tr.querySelector('[name="ven[]"]');
	ven.value = data.ven;
	ven.readOnly = true;
}

// Очистка строки в которую идет ввод и снятие readonly
// tr - строка в которую был ввод
function clearFields (tr) {
	const name = tr.querySelector('[name="name[]"]');
	name.value = '';
	name.readOnly = false;
	const code = tr.querySelector('[name="code[]"]');
	code.value = '';
	code.readOnly = false;
	const ven = tr.querySelector('[name="ven[]"]');
	ven.value = '';
	ven.readOnly = false;
}

// Вывод списка найденных
// inp - элемент в котором был ввод
// ardata - массив найденных значений
function outputSearchData (inp, ardata) {
	const ul = document.getElementById('result');
	ul.textContent = '';
	const tr = inp.closest('tr');
	clearFields(tr);
	for (const data of ardata) {
		const li = document.createElement('li');
		li.textContent = data.name;
		ul.append(li);
		li.addEventListener('click', () => {
				outputInTable(data, tr);
				ul.textContent = '';
			},
			{once:true}	);
	}
}

const MINSEARCHLENGTH = 3;

async function findItem ({target}) {
	if (target.name !== 'article[]') return;
	const searchStr = target.value;
	let data;
	if (searchStr.length >= MINSEARCHLENGTH) {
		const responce = await fetch('test_ajax_out.php?q='+searchStr);
		data = await responce.json();
	} else {
		data = await [];
	}
	outputSearchData(target, data);
}

document.addEventListener('DOMContentLoaded', () => {
	const table = document.getElementById('table')
	table.addEventListener('input', findItem);
})

Последний раз редактировалось voraa, 22.09.2023 в 16:22.
Ответить с цитированием
  #22 (permalink)  
Старый 22.09.2023, 16:42
Интересующийся
Отправить личное сообщение для Sheratan Посмотреть профиль Найти все сообщения от Sheratan
 
Регистрация: 13.09.2023
Сообщений: 22

Сообщение от voraa
Вот почему не спрашивать и не описывать задачу всю сразу. Со всеми особенностями.
Из-за того что тогда не будет ясна основная проблема.
На странице еще десяток полей и пересчет значений, что здесь не к месту.
А на объяснение всего механизма уйдет куча лишних слов, которые запутают и не позволят решить проблему.
А так, конечно, согласен лучше видеть всю картину, но и вникать во весь проект это уже лишнее. Где грань что надо, что нет для именно этого решения сложно угадать, когда знаний в вопросе минимум...
Сорри...

----
не ищет сейчас совсем
----
при вводе первого символа уже появляется div в котором вывод результата
Добавил закрыть список когда мешает и открытие видимости при его обновлении.

function outputSearchData (inp, ardata) {
document.getElementById('search_result').style.dis play='block';

Последний раз редактировалось Sheratan, 25.09.2023 в 09:20.
Ответить с цитированием
  #23 (permalink)  
Старый 22.09.2023, 16:48
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

Сообщение от Sheratan
не ищет сейчас совсем
const table = document.getElementById('table')
table.addEventListener('input', findItem);

Если вы свою table обозвали id='11' то и в .getElementById надо было '11' ставить. В консоле же ошибки сразу видны.
Ответить с цитированием
  #24 (permalink)  
Старый 22.09.2023, 17:05
Интересующийся
Отправить личное сообщение для Sheratan Посмотреть профиль Найти все сообщения от Sheratan
 
Регистрация: 13.09.2023
Сообщений: 22

Увы, таблиц несколько и они еще и вложенные в другую таблицу
Ответить с цитированием
  #25 (permalink)  
Старый 22.09.2023, 17:09
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

Так и надо указать ид самой внешней таблицы (или внутренние все разные? в примере одинаковые)
Ответить с цитированием
  #26 (permalink)  
Старый 22.09.2023, 17:13
Интересующийся
Отправить личное сообщение для Sheratan Посмотреть профиль Найти все сообщения от Sheratan
 
Регистрация: 13.09.2023
Сообщений: 22

вложенные по структуре одинаковые
Ответить с цитированием
  #27 (permalink)  
Старый 22.09.2023, 17:15
Интересующийся
Отправить личное сообщение для Sheratan Посмотреть профиль Найти все сообщения от Sheratan
 
Регистрация: 13.09.2023
Сообщений: 22

на основную индекс добавил, в скрипте указал
нет поиска

правились имена полей в таблице и скрипте

Последний раз редактировалось Sheratan, 25.09.2023 в 09:20.
Ответить с цитированием
  #28 (permalink)  
Старый 22.09.2023, 17:18
Интересующийся
Отправить личное сообщение для Sheratan Посмотреть профиль Найти все сообщения от Sheratan
 
Регистрация: 13.09.2023
Сообщений: 22

нашел ошибку, работает поиск
Ответить с цитированием
  #29 (permalink)  
Старый 22.09.2023, 17:19
Интересующийся
Отправить личное сообщение для Sheratan Посмотреть профиль Найти все сообщения от Sheratan
 
Регистрация: 13.09.2023
Сообщений: 22

появление div с поиском при вводе 1,2 символов как скрыть?
(внизу зеленый div)
Ответить с цитированием
  #30 (permalink)  
Старый 22.09.2023, 18:05
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

Сообщение от Sheratan
появление div с поиском при вводе 1,2 символов как скрыть?
Как то так можно
// Вывод списка найденых
// inp - элемент в котором был ввод
// ardata - массив найденых значений
function outputSearchData (inp, ardata) {
	const ul = document.getElementById('result');
	ul.textContent = '';
	const tr = inp.closest('tr');
	clearFields(tr);
	let disp = 'none';
	for (const data of ardata) {
		const li = document.createElement('li');
		li.textContent = data.name;
		ul.append(li);
		disp = 'block';
		li.addEventListener('click', () => {
				outputInTable(data, tr);
				ul.textContent = '';
			},
			{once:true}	);
	}
	document.getElementById('search_result').style.display = disp;
}
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отмена отправки формы в обработчике внутри AJAX Lion_astana jQuery 2 04.06.2017 23:14
Отправка Ajax комментов блокирует все формы arimanecro AJAX и COMET 9 07.11.2014 17:32
AJAX, PERL, запись в файл и неожиданный ответ от сервера Jopses jQuery 3 28.02.2013 16:06
Ajax не возвращает ответ. AlThar jQuery 2 16.02.2010 02:40
Ajax - JSON - не распознает пришедший ответ Майский Кот jQuery 1 14.05.2009 00:40