мне помощь нужна чет застрял пол дня мучаюсь уже есть форма ТАБЛИЦА с значениями , хочу что бы была кнопка перезаписи полей, то есть некоторые TD это input и которые можно изменить и в sql записать и если перезагрузить страницу то динамически создастся таблица с измененными значениями PHP: <table> <tr> <th></th> <th></th> <th></th> </tr> <tr> <td>id</td> <td>name</td> <td>description</td> </tr> <tr> <td>id</td> <td>name</td> <td>description</td> </tr> </table> и что бы все это отправить в рнр файл для перезаписи в sql мне нужен такой обьект Код (Javascript): data = { { id: 1, name: name, description: description }, } id: 2, name: name, description: description }, } при этом в data передавать только те поля которые изменились (тут я думаю сделать так Код (Javascript): if ($(this).data('value') !== $(this).val()) ) проблема в том что я не могу понять как пушить в обьект и не могу добраться до инпутов Код (Javascript): $('#' + idForm).find('tr'); нахожу обьект TRок а дальше не получается
По вашей таблице инпутов то и нету, как вы собираетесь добираться до того чего нет? а так вообще обычно такие вещи аяксовово делают типа есть у вас где-то <input data-id="3"> , грубо говоря на все инпуты вешается обработчик отслеживающий изменение, при изменении шлет аякс запрос с новым значением ячейки, ид берем из атрибута data-id например... все..... никаких перезагрузок страницы не нужно!
да то я не стал засорять код, сама таблица в форме, а в TD есть инпуты это типо keyup? это на каждое изменение будет запрос, а меня есть кнопка, которая собирает все измененные поля формируется в объект и шлет на сохранение ( по крайней мере так планируется ))), есть еще идеи как помочь мне? --- Добавлено --- так я создаю tbody, напихал этих data-velue куда только можно пока придумывал как сделать, но пока не получилсоь Код (Javascript): stringData += "<tr data-id='" + response[idx]['id'] + "'>" + "<td>" + response[idx]['id'] + "</td>" + "<td><input id = 'name_"+response[idx]['id']+"' type='text' data-name='name' data-value='" + response[idx]['name'] + "' value='" + response[idx]['name'] + "' title='" + response[idx]['name'] + "'></td>" + "<td><input id = 'enable_"+response[idx]['id']+"' type='checkbox' data-name='enable' checked data-isCheck='" + response[idx]['enable'] + "'></td>" + "<td><input id = 'description_"+response[idx]['id']+"' type='text' data-name='description' value='" + response[idx]['description'] + "' data-value='" + response[idx]['description'] + "' title='" + response[idx]['description'] + "'></td>" + "</tr>"; --- Добавлено --- мне кажется мне нужно сделать два цикла первый перебирает TR в форме и делает - Код (Javascript): data = { 1: {} } , а второй перебирает TD в TR и делает так Код (Javascript): data = { 1: { id: id, name: name, description: description } } и TR может быть много
Обходите его простым циклом или each. Внутри собираете текст из td Код (Javascript): var result = []; arTr.each(function(idx,el){ var elm=$(el),data={}; elm.find('tr').each(function(id,elem){ if (id==0) data.id = $(elem).text() else if (id==1) data.name = $(elem).text(); else if (id==2) data.description = $(elem).text(); }); result.push(data); }); --- Добавлено --- тогда даже легче
Правда массив придет в иной форме чем надо, его лучше там и склеить как надо... Ну, или в этом JS скрипте перекомпоновать HTML: <form id="test"> <table> <tr><td><input name="id[]"></td><td><input name="name[]"></td><input name="desciption[]"></td></tr> <tr><td><input name="id[]"></td><td><input name="name[]"></td><input name="desciption[]"></td></tr> </table> </form> <script> $(doument).ready(function(){ $('#test').submit(function(){ $.ajax({ url:'script.php', data:$(this).serializeArray(), ......... }); return false; }); }); </script>