За последние 24 часа нас посетили 17530 программистов и 1653 робота. Сейчас ищут 936 программистов ...

отправка формы

Тема в разделе "JavaScript и AJAX", создана пользователем nikemat, 8 ноя 2014.

  1. nikemat

    nikemat Guest

    здравствуйте. находясь непосредственно на странице, всё работает. а при переходах без перезагрузки (методом load, когда в блоке меняется только содержимое страницы), данные формы (аргумент data) скрипту не передаются.
    использую для отправки формы следующую хрестоматийную функцию:
    Код (Text):
    1.  
    2. function saveform (data,bez)
    3. {
    4.     var name=data.name.value;
    5. var city=data.city.value;
    6. var music=data.music.value;
    7. var date=data.date.value+' '+data.time.value;
    8. var message=data.message.value;
    9. var view=data.view.value;
    10.     $.post('admin/song.php?bez='+bez,{name:name,city:city, music:music,date:date,message:message,view:view},function(data){
    11.         $('.form_settings').html(data);
    12.     },'json');
    13. }
    подскажите, в чём дело, где что забыл или не учёл
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    что на входе в функцию (содержимое аргументов)? как вызывается функция?
     
  3. nikemat

    nikemat Guest

    на входе- массив из полей формы.
    <input type=submit onclick="saveform(this.form,1);return false">
     
  4. metadon

    metadon Активный пользователь

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    this.form - тут может быть проблема
     
  5. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    В вашем коде я такого метода не обнаружил, но суть скорее не в этом. Если ваша форма динамически подгружается на страницу, то необходимо использовать делегированную обработку событий. Кроме того, что гораздо важнее, onckick и другие обработчики событий прописывать в html - это не есть гуд в принципе, а с использованием jQuery, может приводить к неправильной работе всего сценария. В общем, попробуйте так:
    Код (PHP):
    1. $('parent_static').on('click', 'submit_button_selector',function(e){
    2.     e.preventDefault();
    3.     /* далее ваш код ajax-запроса */
    4. });
    Где parent_static - это любой (лучше ближайший) родительский статичный элемент. И конечно же, убрать все onclick и иже с ними.
    P.S. Кстати, если вам нужно собрать все данные полей формы, то можно это сделать проще: методы serialize() или serializeArray()
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    это метод фреймворка jQuery подразумевается.

    nikemat, дайте посмотреть в живую вашу страницу. не могу у себя воспроизвести ваши условия. рисую форму, навешиваю вашу функцию, всё отправляется и на стороне пхп всё видно.
     
  7. nikemat

    nikemat Guest

    так работает
    если выбрать в меню "по заявкам"- не отправляет
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965


    клик по кнопке работает ок. но сама форма кривая (если быть точным - кончается после первого же поля) поэтому обработчик формы запинается на поиске указанных в его теле полей формы. а поскольку проверки исключений никакой нет - прекращается и выполнение обработчика формы.
     
  9. nikemat

    nikemat Guest

    ну а где искать-то этот косяк? откуда взялось закрытие формы, если в самой форме всё правильно... может со скриптами конфликт?
    как это использовать? это будет агрумент, передаваемый в функции при клике или разбор внутри функции?
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    косяк во вложенности. основы xml надо проходить до того как верстать начинать. то что я зеленым красным выделил это то как рвется форма. а рвется она потому что она не может начинаться в одном тейблдэйте а кончаться в другом. прямая загрузка не лечит этот косяк - браузер успевает придумать правильное наследование. а вот с загрузкой через аякс всё обламывается - жс "восстанавливает" правильных хмл и закрывает форму перед закрытием тейблдаты в котором она объявлена.

    если надо сверстать форму таблицей то тег формы должен быть стаканом для таблицы а не наоборот.