Это даже не вопрос а недопонимание как работает логика этого кода, код вощем вот
$('input.d-autocomplitter').live('keypress', function (e) {
var thisInput = $(this);
var thisId = $(this).attr('id');
if (typeof AddProductTimer!='undefined') {
clearTimeout(AddProductTimer);
AddProductTimer = undefined;
}
AddProductTimer = setTimeout(function () {
var sendData = {};
sendData.product_info = thisInput.val();
$(".d-autocomplitter-data").html('');
$.post(apiUrl('categorylist', 'productSearch'), sendData, function (data) {
var html = '';
for (var i = 0; i < data.length; i++) {
html += 'много элементов c классом auto-item ';
}
$(".d-autocomplitter-data").html(html);
$('.auto-item').live('click', function () {
var product_id = $(this).attr('product_id');
var thoseInp = $('input#'+thisId);
thoseInp.attr('product_id', product_id).val($(this).html());
thisId=undefined; // странная штука, если оставить не тронутым эту переменную то при изменении инпутов будут меняться все ранее измененные инпуты
})
}, 'json')
}, 1000);
}).live('keydown',function () {
$(this).trigger('keypress'); // на случай если сделают ctrl+v
}).live('focus',function () {
setTimeout(function () {
$(".d-autocomplitter-data").html('');
}, 200)
});
На странице есть несколько инпутов с классом d-autocomplitter. У этих инпутов разные id. При набирании чегонить в этих инпутах делается запрос на сервер и сервер отдает массив данных которые разбираются на элементы с классом auto-item, на эти элементы сразу вешается событие клика при котором что-то делается.
Соль вощем вот в чем : когда меняется первый инпут то все хорошо, когда меняется второй и последующие инпуты то каждый последующий меняет все предыдущие инпуты которые были изменены, но не меняет нетронутые инпуты. Строчку
var thoseInp = $('input#'+thisId);
добавил чтобы посмотреть что происходит в дебаггере хромовом, и вот что интересно: при изменении второго и последующих инпутов строчка выше всегда возкращает все инпуты что были изменены ранее или сейчас, но не те что еще не трогались. Вощем странно и не понятно. Решение для себя нашел, он в виде комментария в коде.