22.11.2013, 22:32
|
Новичок на форуме
|
|
Регистрация: 22.11.2013
Сообщений: 3
|
|
Добавление атрибута form в input
Вот интересно, почему в input не добавляется атрибут form?
Ситуация следующая.
Есть таблица с товарами. 2000 строк на странице. В каждой строке есть ячейка с полем добавления файлов (пхп)
echo '<input type="file" id="photo'.$id.'" multiple="multiple" name="photo'.$id.'[]" onchange="get_action('.$id.'); photo.action=\'bla-bla.php?action=addPhoto&id='.$id.'\'; photo.submit();" />'.
Необходимо, чтобы при добавлении файлов срабатывал только один input, поэтому:
1) все инпуты - за пределами формы;
2) к форме в момент передачи подключается лишь один инпут. Вот тут возникла проблема.
Сама форма:
<form id="photo" enctype="multipart/form-data" method="post">
</form>
Функция get_action(id){
$("#photo"+id).attr("form", "photo");
}.
И не хочет!
Выкрутился добавлением атрибута name:
get_action(id){
$("#photo"+id).attr("name", "photo"+id+"[]");
}
предварительно удалив его из инпутов, естественно.
Но все же интересно, чем JQuery не угодил атрибут form?
Последний раз редактировалось Cosinus, 23.11.2013 в 16:59.
|
|
22.11.2013, 23:52
|
|
Профессор
|
|
Регистрация: 19.01.2010
Сообщений: 354
|
|
Хм, никогда не видел, чтобы кто-нибудь так делал. Судя по гуглу, аттрибут form — какая-то новая фича из HTML5 и работает не везде. Оберни инпуты каждый в свою форму, чувак, в чем проблема?
|
|
23.11.2013, 00:10
|
|
Профессор
|
|
Регистрация: 19.01.2010
Сообщений: 354
|
|
Мне кажется, лучше обойтись совсем без jQuery и почти совсем без js, генеря такую форму для каждого инпута:
<form method="post" action="./bla-bla.php">
<input type="hidden" name="action" value="addPhoto"/>
<input type="hidden" name="id" value="<?php echo $id; ?>"/>
<input type="file" multiple="multiple" name="photo<?php echo $id; ?>[]" onchange="this.form.submit();"/>
</form>
|
|
23.11.2013, 00:17
|
Новичок на форуме
|
|
Регистрация: 22.11.2013
Сообщений: 3
|
|
Проблема в том, что вся таблица - уже в одной большой форме. Там еще чекбоксы в некоторых ячейках. Не мной делалось, мое дело - добавить возможность добавлять фото к каждому товару без лишних телодвижений.
Но не в этом суть.
Да, form - это из HTML5. Уже не один год, так что не такое уж и новое. Но суть в том, что функции .attr(), вообще говоря, фиолетово, какие параметры мы ей прописываем: первый она запишет атрибутом, второй - его значением. Напишите .attr("bim", "bom") и получите в теге bim="bom". А вот form ей не такой, видишь ли. Какого?
|
|
23.11.2013, 06:27
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Cosinus,
Вводите данные в свои инпуты, по onchange или оninput перезаписывать в соотвествующие инпуты формы, селекторы для перезаписи можно проставить в атрибут daта вводящего инпута
|
|
23.11.2013, 13:49
|
|
Профессор
|
|
Регистрация: 19.01.2010
Сообщений: 354
|
|
Я правильно понял, что все выглядит как-то так?
<form id="photo" enctype="multipart/form-data" method="post"></form>
<form id="goods">
<input type="file" multiple="multiple" name="photo1[]"/>
<input type="file" multiple="multiple" name="photo2[]"/>
<input type="file" multiple="multiple" name="photo3[]"/>
…
</form>
Если да, то у меня для тебя плохие новости: легче все переделать, чем пытаться как-то это допилить. На ум приходят откровенно топорные варианты: например по onchange переносить input в другую форму при помощи appendChild и сабмитить ее, но мне кажется, это только повысит градус неадеквата в коде.
Кстати, я проверил: $.fn.attr('form', 'value') должен работать нормально. По идее, он вызывает setAttribute, так что если не сильно доверяешь jQ, то можешь попробовать нативными средствами.
Последний раз редактировалось ixth, 23.11.2013 в 13:52.
|
|
23.11.2013, 15:53
|
Новичок на форуме
|
|
Регистрация: 22.11.2013
Сообщений: 3
|
|
Rise, кавычки есть на самом деле, накосячил при копировании сюда лишь. Исправил в исходном посте.
Да, так работает. Но вопрос ведь по JQuery.
ixth, дружище, да прочитай же ты внимательнее! Все работает уже превосходно! Мне не нужно ничего допиливать. Мне просто интересно, почему функция .attr() JQuery не добавляет атрибут form. Все, больше ничего мне не нужно.
И да, не добавляет. Любой другой добавляет, form - нет.
PS. Да, подключил последнюю версию с Гугла - там порядок. Поэкспериментировал - не работает на версиях ниже 1.6.
Вопрос на самом деле к гуру, тем кто уже знает, почему так.
Если никто не знает - на досуге сам покопаюсь.
Последний раз редактировалось Cosinus, 23.11.2013 в 17:00.
|
|
|
|