2010-08-25 3 views
3

JQuery, отправляйте() У меня есть форма со следующей HTML ниже:форма не представляет при выполнении функции

<form id="course_edit_form" name="course_form" action="/courses/save" method="post"> 
    <fieldset> 
    <div id="side-left"> 
     <!-- Course Name --> 
     <input type="hidden" id="course_id" name="course_id" value="${c.the_course.id}" /> 
     <div> 
      <label for="name" id="name_label">Course name<em>*</em></label> 
      ${h.tags.text("name", c.the_course.name, size=40)} 
     </div> 

     <!-- Event Type --> 
     <div> 
      <label for="type_list" id="class_type_label">Event type</label> 
      <p>Use Ctrl to do multi-select</p> 
      <select multiple="multiple" id="type_list" class="type-box required" name="type_list"> 
      % for ty in c.all_types: 
       % if int(ty.id) in c.typeids: 
       <option selected="selected" value="${int(ty.id)}">${str(ty.name)}</option> 
       % else: 
       <option value="${int(ty.id)}">${str(ty.name)}</option> 
       % endif 
      % endfor 
       <option value="all">All</option> 
      </select> 
     </div> 
     <div>....more input fields here</div> 
    </div> 
    <!-- Controls --> 
    <div class="controls"> 
     <input id="delete" name="delete" type="button" value="Delete" /> 
     <input id="submit" name="submit" type="submit" value="Update" /> 
    </div> 
    </fieldset> 
</form> 

Я прикрепил обработчик щелчка на мою кнопку так, чтобы мой Javascript сначала проверить свою форму до представляя фактическую форму. Если во время проверки все будет хорошо, я поставлю флаг «course_form_valid» в true. В последние пару строк моей JavaScript У меня есть:

if (course_form_valid) { 
    jQuery('#course_edit_form').submit(); 
} 

Однако выше линии никогда не отправляет форму, даже когда course_form_valid верно. Я даже попытался удалить действие и метод атрибуты моей формы и используется ниже Javascript вместо этого, но все же это не будет работать:

 if (course_form_valid) { 
     jQuery('#course_edit_form').submit(function() { 
     jQuery.ajax({ 
      url: '/courses/save', 
      type: 'GET', 
      data: jQuery('#course_edit_form').serialize(), 
      async: false 
     }); 
     }); 
    } 

Что происходит? Может кто-нибудь, пожалуйста, помогите мне?

-Марк

+0

Не можете добавить пример работы jsbin? www.jsbin.com –

+0

О, простите, я забыл упомянуть, что первая строка моей функции обработчика кликов имеет e.preventDefault(); Это вызывает некоторые икоты? – Mark

+0

Я не могу найти проблему, любые другие js-коды, пожалуйста ... как для 'course_form_valid' установлено значение' true'? вы пробовали 'jQuery ('# course_edit_form'). submit();' без 'if'? – Reigel

ответ

1

я установил выше проблему путем удаления e.preventDefault() и путем изменения последних несколько строк JS коды:

 if (course_form_valid) { 
     jQuery.ajax({ 
      url: '/courses/save', 
      type: 'GET', 
      data: jQuery('#course_edit_form').serialize(), 
      async: false 
     }); 
    } 

Спасибо за помощь каждой и скоростное время отклика , Не могли бы вы сделать это без вас, ребята.

1

Сначала я хотел бы сделать это в Firefox с Firebug plugin. Убедитесь, что в консоли отображаются HTTP-запросы, а затем повторите попытку. Что ты видишь? Не было сделано никакого запроса? Если запрос не был сделан, то подача никогда не будет достигнута. Если есть сообщение, есть ли последующая ошибка? Это ошибка 404? Если да, убедитесь, что существует /courses/save. Если это ошибка 500, это означает, что форма отправляется, но у вас есть проблема в коде на стороне сервера. Firebug должен вернуться с ошибкой, отправляемой вашим сервером, что поможет вам отладить оттуда.

Кроме того, убедитесь, что если вы являетесь «ПОЧТОВЫМ», то ваш бэкэнд-код настроен на получение POST.

Это должно быть, вероятно, на правильном пути!

+0

Да, я использую плагин Firebug в Firefox. Я попытался добавить точки останова в свой JS-код, и когда я перехожу через код, стрелка на левом поле указывает на submit(), однако HTTP-запрос не был сделан. – Mark

1

Попробуйте это,

if (course_form_valid) { 
    $('#course_edit_form').submit(function() { 
     return true; 
    }); 
} 
1

Что происходит, что вы должны проверить его как Соонса как пользователь отправить форму, то вы можете вернуть true или false в зависимости от проверки.

уничтожить if statement. Написать только это:

jQuery('#course_edit_form').submit(function() { 
if (course_form_valid) { 
    return false; // It prevents form submition 
} 
jQuery.ajax({ 
url: '/courses/save', 
type: 'GET', 
data: jQuery('#course_edit_form').serialize(), 
async: false 
}); 
}); 
Смежные вопросы