передача значения из input "value" в div "id"
Схема такая:
Есть ссылка <a> которая по клику записывает значения своего id в куки с разделителем "-" а именно название, цену и количество. Нужно сделать так, чтоб количество определял пользователь с помощью <input> значения value. То есть цифра из <input value> должна попасть в конец <a id> вместо еденицы (1 штука по умолчанию). было: product1-price100-1 должно быть: product1-price100-2 Логически получился следующий код, который так и не заработал :( Что нужно изменить для успешного выполнения? HTML: <div class='add'><a id='product1-price100-1' class='addCart'></a> <input class='addCopies' value='2'></div> <div class='add'><a id='product2-price100-1' class='addCart'></a> <input class='addCopies' value='2'></div> jQuery: $(document).ready(function(){ $('div.add').each( //для каждого блока со стилем .add var div = $(this); var a = $(div).('a'); var i = $(div).('input'); var value = $(i).val(); //берём значение input value var a_id = $(a).attr('id'); //смотрим значение a id var arr = a_id.split('-'); //парсим a id по дефису var new_id = arr[0] + arr[1] + "-" + value; //добавляем новое значение $(a).attr('id',new_id);//заменяем id на новое ); }); |
Поправил ошибки
$(document).ready(function(){ $('div.add').each(function(){ //для каждого блока со стилем .add var div = $(this); var a = $(div).children('a'); var i = $(div).children('input'); var value = $(i).val(); //берём значение input value var a_id = $(a).attr('id'); //смотрим значение a id var arr = a_id.split('-'); //парсим a id по дефису var new_id = arr[0] + arr[1] + "-" + value; //добавляем новое значение $(a).attr('id',new_id);//заменяем id на новое }); }); |
спасибо, действительно ночная оплошность ))
теоритически всё логично, но на практике пример всё равно не заработал.. |
А где, собственно, указание на то, что действие должно выполняться по клику? Может, $('div.add').click?
Много лишних долларов в коде. jQuery-селектор возвращает jQuery-массив, его нет смысла потом оборачивать в лишний $ - мы ведь нигде не обращаемся к отдельному элементу этого массива. var div = $(this); var a = div.children('a'); var i = div.children('input'); var value = i.val(); //берём значение input value var a_id = a.attr('id'); //смотрим значение a id Доллары имеют смысл, только если делать вот так: var div = $(this); var i = div.children('input')*!*[0]*/!*; var value = *!*$(i)*/!*.val(); //i - не jQuery, a HTMLElement Но ещё правильнее в этом случае переписать по-другому: var div = $(this); var i = div.children('input')*!*.eq(0)*/!*; var value = *!*i*/!*.val(); //i - jQuery |
Sanda
действие происходит по клику на <a class='addCart'> - я хотел чтоб значение передавалось сразу после ввода в <input>, но Вы вероятно правы, нужно по клику. |
Не важно, как именно передавать - по клику, по вводу. Важно указать в коде метод передачи (: В представленном куске его просто нет. На document.ready однократно выполняется некое действие, но никаких указаний на то, что это же действие нужно выполнять ещё раз, нет.
|
о, в какую сторону двигаться понял, спасибо )
|
Повторюсь - вместо $('div.add').each поставь $('div.add').click. Ну и исправления Serg_pnz не забудь добавить. Не самый правильный вариант реализации, конечно, но работать должен.
|
Попутно input заменил на select, а родительский div на p.
Решение проблемы 1: В строке 8 нужно было не просто указать значение value, а указать, что оно добавляется к уже имеющемуся id! было: '-' + 'value' стало: 'id' + '-' + 'value' Решение проблемы 2: Для элемента <select> нужен не .click() а .change() ! С этим кодом заработало: $(document).ready(function(){ $('#products p').change(function(){ var p = $(this); var a = p.children('a'); var s = p.children('select').eq(0); var value = s.val(); var a_id = a.attr('id'); var arr = a_id.split('id' + '-'); var new_id = arr[0] + arr[1] + '-' + value; $(a).attr('id', new_id); }); }); |
Часовой пояс GMT +3, время: 07:04. |