Всем привет! Делаю добавление фотографий, с возможность выбора опций, от которых будет зависеть стоимость. В зависимости от количества, у меня добавляются миниатюры и набор опций Код (Text): ... var span = document.createElement('span'); span.innerHTML = ['<div class="paper">\ <select name="paperChoice[]" class="paperChoice">\ <option value="матовая">матовая</option>\ <option value="глянцевая">глянцевая</option>\ </select>\ <input type="text" name="cost[]" class="cost">\ </div>'].join(''); ... Сейчас мучаю .on('change') , но максимум, что хотя бы реагирует - это вот Код (Text): $('.paper').on('change', '.paperChoice', function() { var cost = $(this).val() $('.cost').val(cost) }); У меня не получается обращаться к name, тогда просто ничего не происходит. И сейчас, где бы я не сменил опцию, значение поля cost будет меняться в каждом блоке, а хочется, чтобы они были суверенны
Код (PHP): var span = jQuery('<span/>').append( jQuery('<select/>', {name: 'paperChoice[]', class: 'paperChoice'}).append( jQuery('<option/>', {value: 'матовая'}).append('матовая'), jQuery('<option/>', {value: 'глянцевая'}).append('глянцевая') ), jQuery('<input/>', {type: 'text', name: 'cost[]', class: 'cost'}) ); Вот так будет серьезней, я думаю. Так-с, по поводу change... Если мне не изменяет память, функцию обработчик jQuery.on() убрали из апи jQuery еще давно. Сделай так: Код (PHP): function paperChoice(event) { alert('helloworld'); } jQuery('select.paperChoice').bind('change', window.event, paperChoice);
Наоборот, метод "on" сделали универсальным. Остальные (bind, live & delegate) устаревают и будут удалены в будущих версиях.
Хм, и правда работает, шожэтоятак... Добавлено спустя 1 минуту 42 секунды: Сто пудов, jQuery.live() убрали... Перепутал)
Подскажите, а как можно созданные поля поместить в массив, чтобы потом post'ом отправить? Никак не пойму, как подступить Сейчас у меня обособленно меняются значения, но с атрибутами name явно что-то не так Код (Text): <form class="photoForm" name="photoForm" method="POST" enctype="multipart/form-data"> <input type="file" id="files" name="files[]" multiple/> <output id="list"></output> <input type="submit" class="submit"> </form> Код (Text): function handleFileSelect(evt) { var files = evt.target.files; // FileList object // Loop through the FileList and render image files as thumbnails. for (var i = 0, f; f = files[i]; i++) { // Only process image files. if (!f.type.match('image.*')) { continue; } var reader = new FileReader(); // Closure to capture the file information. reader.onload = (function (theFile) { return function (e) { $("#list").append( $('<div/>').attr({'class': 'span4'}).append( $('<img/>').attr({'class': 'thumb', 'src': e.target.result, 'title': escape(theFile.name)}) ).append(escape(theFile.name)).append( $('<select/>').attr({'id': 'myDiv', 'name': 'paperChoice[]', 'class': 'paperChoice'}).append( $('<option/>').attr({'value': 'Матовая'}).append('Матовая'), $('<option/>').attr({'value': 'Глянцевая'}).append('Глянцевая') ), $('<input/>').attr({'type': 'text', 'name': 'info[]'}) ) ) }; })(f); // Read in the image file as a data URL. reader.readAsDataURL(f); } } document.getElementById('files').addEventListener('change', handleFileSelect, false); $('#list').on('change', '[name="paperChoice[]"]',function(event) { $(this).parent().children('[name="info[]"]').val($(this).val()) });