Передача текста и переменной из цикла по нажатию Enter
Добрый вечер. Не могу победить задачу.
Есть, скажем запись в БД: ее номер и текстовое содержимое. Как передать текст я разобрался... но никак не могу передать номер !!! list - передаем массив данных [1|text, 17|text1, 23|text2.... 999|textN]
$("#abc").keyup(function(I){
$("#text").html("").show();
for(var i in list){
var showInfo = list[i].split('|');
$('#text').append('<div>'+showInfo[1]+'</div>');
var no = showInfo[0]; - ВОТ ЭТО ЗНАЧЕНИЕ МНЕ НАДО ПОЛУЧИТЬ
}, 'html';
break;);}
$("#abc").keydown(function(I){
switch(I.keyCode) {
case 13: // enter
alert($(this).val()); - вот тут получить переменную no
return false;
break;);}
Никак не выходит вывести номер no в alert. Получаю значение showInfo[1]. Пробовал еще несколько других способов - они тоже не рабочие. Единственный рабочий вариант был передавать:
$('#text').append('<div>'+showInfo[1]+'|<font style="font-size:1px;">'+showInfo[0]+'</font></div>');
А далее получать ее как то так:
var no = $(this).val().split('|');
alert(no[1]);
Но как то не нравиться мне этот способ. Не эстетичный он. |
Цитата:
|
а что в нем не так ?...
разве что синтаксические ошибки... ['1|text', '17|text1', '23|text2', ...., '999|textN'] вполне данные получаю далее их разбиваю: var showInfo = list[i].split('|'); и получаю: showInfo[0] = 1; showInfo[1] = text; // i = 1 showInfo[0] = 17; showInfo[text1] = text; // i = 2 ......... showInfo[0] = 999; showInfo[1] = textN; // i = n я просто набросок кода кинул.... с описанием интересующей меня проблемы. Данные получаю - вопросов нету.... просто хочу, чтоб пользователь видел $('#text').append('<div>'+showInfo[1]+'</div>'); а переменная на выполнение передавалась showInfo[0] |
Цитата:
Ты хоть бы примеры рабочие делал... |
еще раз повторюсь, это для наглядности....
давайте, я для наглядности скину просто весь код, чтоб Вы поняли, что с массивом все в порядке:
var suggest_count = 0;
var input_initial_value = '';
var suggest_selected = 0;
var no;
$(window).load(function(){
// читаем ввод с клавиатуры
$("#search_box").keyup(function(I){
// определяем какие действия нужно делать при нажатии на клавиатуру
switch(I.keyCode) {
// игнорируем нажатия на эти клавишы
case 13: // enter
case 27: // escape
case 38: // стрелка вверх
case 40: // стрелка вниз
break;
default:
// производим поиск только при вводе более 2х символов
if($(this).val().length>3){
input_initial_value = $(this).val();
// производим AJAX запрос к /ajax/ajax.php, передаем ему GET query, в который мы помещаем наш запрос
$.post("/ajax/ajax.php", { "query":$(this).val() },function(data){
//php скрипт возвращает нам строку, ее надо распарсить в массив.
// возвращаемые данные: ['1|test','2|test 1','17|test 2','28|test 3']
var list = eval("("+data+")");
suggest_count = list.length;
if(suggest_count > 0){
// перед показом слоя подсказки, его обнуляем
$("#search_advice_wrapper").html("").show();
for(var i in list){
if(list[i] != ''){
var showInfo = list[i].split('|');
// добавляем слою позиции
$('#search_advice_wrapper').append('<div class="advice_variant">'+showInfo[1]+'</div>')
// ВОТ ТУТ НАДО КАК ТО ЗАПИСАТЬ ЗНАЧЕНИЕ showInfo[0]
}
}
}
}, 'html');
}
break;
}
});
//считываем нажатие клавишь, уже после вывода подсказки
$("#search_box").keydown(function(I){
switch(I.keyCode) {
// по нажатию клавишь прячем подсказку
case 13: // enter
$('#search_advice_wrapper').hide();
alert($(this).val()); // А ТУТ ПОЛУЧИТЬ ЕГО !!!
//
return false;
break;
// делаем переход по подсказке стрелочками клавиатуры
case 38: // стрелка вверх
case 40: // стрелка вниз
I.preventDefault();
if(suggest_count){
//делаем выделение пунктов в слое, переход по стрелочкам
key_activate( I.keyCode-39 );
}
break;
}
});
// делаем обработку клика по подсказке
$('.advice_variant').live('click',function(){
// 1. ПЕРЕХОД ПО УРЛ
alert($(this).val()); // И ТУТ ПОЛУЧИТЬ ЕГО !!!
// прячем слой подсказки
$('#search_advice_wrapper').fadeOut(350).html('');
});
// если кликаем в любом месте сайта, нужно спрятать подсказку
$('html').click(function(){
$('#search_advice_wrapper').hide();
});
// если кликаем на поле input и есть пункты подсказки, то показываем скрытый слой
$('#search_box').click(function(event){
//alert(suggest_count);
if(suggest_count)
$('#search_advice_wrapper').show();
event.stopPropagation();
});
});
function key_activate(n){
$('#search_advice_wrapper div').eq(suggest_selected-1).removeClass('active');
if(n == 1 && suggest_selected < suggest_count){
suggest_selected++;
}else if(n == -1 && suggest_selected > 0){
suggest_selected--;
}
if( suggest_selected > 0){
$('#search_advice_wrapper div').eq(suggest_selected-1).addClass('active');
$("#search_box").val( $('#search_advice_wrapper div').eq(suggest_selected-1).text() );
} else {
$("#search_box").val( input_initial_value );
}
}
Собственно все работает... только я получаю в alert значение showInfo[1], а хочу showInfo[0]. При этом пользователь при выборе видит showInfo[1]. Выбирает его. А в alert уже передается showInfo[0] выбранного элемента из списка. |
Цитата:
Т.е. это типа объяснение? |
Нет. Это то что необходимо сделать. Задача, которую я не могу решить !
|
| Часовой пояс GMT +3, время: 03:05. |