Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.11.2013, 22:32
Новичок на форуме
Отправить личное сообщение для Cosinus Посмотреть профиль Найти все сообщения от Cosinus
 
Регистрация: 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.
Ответить с цитированием
  #2 (permalink)  
Старый 22.11.2013, 23:52
Аватар для ixth
Профессор
Отправить личное сообщение для ixth Посмотреть профиль Найти все сообщения от ixth
 
Регистрация: 19.01.2010
Сообщений: 354

Хм, никогда не видел, чтобы кто-нибудь так делал. Судя по гуглу, аттрибут form — какая-то новая фича из HTML5 и работает не везде. Оберни инпуты каждый в свою форму, чувак, в чем проблема?
Ответить с цитированием
  #3 (permalink)  
Старый 23.11.2013, 00:10
Аватар для ixth
Профессор
Отправить личное сообщение для ixth Посмотреть профиль Найти все сообщения от ixth
 
Регистрация: 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>
Ответить с цитированием
  #4 (permalink)  
Старый 23.11.2013, 00:17
Новичок на форуме
Отправить личное сообщение для Cosinus Посмотреть профиль Найти все сообщения от Cosinus
 
Регистрация: 22.11.2013
Сообщений: 3

Проблема в том, что вся таблица - уже в одной большой форме. Там еще чекбоксы в некоторых ячейках. Не мной делалось, мое дело - добавить возможность добавлять фото к каждому товару без лишних телодвижений.
Но не в этом суть.
Да, form - это из HTML5. Уже не один год, так что не такое уж и новое. Но суть в том, что функции .attr(), вообще говоря, фиолетово, какие параметры мы ей прописываем: первый она запишет атрибутом, второй - его значением. Напишите .attr("bim", "bom") и получите в теге bim="bom". А вот form ей не такой, видишь ли. Какого?
Ответить с цитированием
  #5 (permalink)  
Старый 23.11.2013, 06:27
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Cosinus,
Вводите данные в свои инпуты, по onchange или оninput перезаписывать в соотвествующие инпуты формы, селекторы для перезаписи можно проставить в атрибут daта вводящего инпута
Ответить с цитированием
  #6 (permalink)  
Старый 23.11.2013, 09:05
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,663

Cosinus, все добавляется, сам косячишь где-то, например, где " после photo.submit(); а еще лучше вынеси все из onchange в функцию:
echo '<input type="file" id="photo'.$id.'" multiple="multiple" name="photo'.$id.'[]" onchange="get_action(this,'.$id.')" />';

function get_action(that, id){
	that.setAttribute('form', 'photo');
	photo.action = 'bla-bla.php?action=addPhoto&id=' + id;
	photo.submit();
}
Ответить с цитированием
  #7 (permalink)  
Старый 23.11.2013, 13:49
Аватар для ixth
Профессор
Отправить личное сообщение для ixth Посмотреть профиль Найти все сообщения от ixth
 
Регистрация: 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.
Ответить с цитированием
  #8 (permalink)  
Старый 23.11.2013, 15:53
Новичок на форуме
Отправить личное сообщение для Cosinus Посмотреть профиль Найти все сообщения от Cosinus
 
Регистрация: 22.11.2013
Сообщений: 3

Rise, кавычки есть на самом деле, накосячил при копировании сюда лишь. Исправил в исходном посте.
Да, так работает. Но вопрос ведь по JQuery.

ixth, дружище, да прочитай же ты внимательнее! Все работает уже превосходно! Мне не нужно ничего допиливать. Мне просто интересно, почему функция .attr() JQuery не добавляет атрибут form. Все, больше ничего мне не нужно.

И да, не добавляет. Любой другой добавляет, form - нет.

PS. Да, подключил последнюю версию с Гугла - там порядок. Поэкспериментировал - не работает на версиях ниже 1.6.
Вопрос на самом деле к гуру, тем кто уже знает, почему так.
Если никто не знает - на досуге сам покопаюсь.

Последний раз редактировалось Cosinus, 23.11.2013 в 17:00.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При добавлении DOCTYPE "плывут" размеры input type=text Demath (X)HTML/CSS 4 08.07.2012 19:27
Добавление атрибута к ссылке с классом stereomaniac1 Общие вопросы Javascript 1 25.01.2012 16:53
Добавление текста к input элементу Cepin Элементы интерфейса 4 05.05.2010 09:10
Динамическое добавление нового option в form artwalek Элементы интерфейса 19 24.04.2009 17:42
в теге input изменение атрибута type gabber Internet Explorer 6 11.11.2008 13:01