Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: jquery.form.js и две формы на одной странице
 
 автор: Zend72   (16.11.2009 в 22:58)   письмо автору
 
 

Имеется следующий код:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>test</title>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="jquery.form.js"></script>
<script type="text/javascript">
// prepare the form when the DOM is ready 
$(document).ready(function() { 
    var options = { 
        target: '#ToUpdate',   // target element(s) to be updated with server response 
        beforeSubmit:  showRequest,  // pre-submit callback 
        success:       showResponse  // post-submit callback 
 
        // other available options: 
        //url:       url         // override for form's 'action' attribute 
        //type:      type        // 'get' or 'post', override for form's 'method' attribute 
        //dataType:  null        // 'xml', 'script', or 'json' (expected server response type) 
        //clearForm: true        // clear all form fields after successful submit 
        //resetForm: true        // reset the form after successful submit 

        // $.ajax options can be used here too, for example: 
        //timeout:   3000 
    }; 
 
    // bind form using 'ajaxForm' 
    $('#myForm1').ajaxForm(options); 
}); 
 
// pre-submit callback 
function showRequest(formData, jqForm, options) { 

    var queryString = $.param(formData); 

    alert('About to submit: \n\n' + queryString); 

    return true; 

 
// post-submit callback 
function showResponse(responseText, statusText)  { 
    alert('status: ' + statusText + '\n\nresponseText: \n' + responseText + 
        '\n\nThe output div should have already been updated with the responseText.'); 

</script>

<head>
<body>

<form id="myForm1" action="../util/uploadfilejshandler.php" method="POST" enctype="multipart/form-data"> 
  <input name="pic" type="file" value="Выберите файл"> 
  <input type="submit" name="Отправить1">
<form>

  <div>
    <p id="ToUpdate" style="border: solid 1px #00FF00"></p>
  </div>

<form id="myForm2" action="handler.php" method="POST">
  <input size="20" type="text" value="test">
  <input type="submit" value="Отправить2">
</form>

</body>
</html>


Первая форма (myForm1) должна быть отправлена без перезагрузки страницы, что собственно и происходит при нажатии на кнопку Отправить 1 и к этому никаких нареканий нет, но если нажать на кнопку Отправить 2, то будет вновь отправлена форма с id равным myForm1, а должна быть отправлена форма с id равным myForm2 самым что ни наесть обычным способом перезагрузкой страницы! Объясните мне пожалуйста: почему так происходит? Я же явно указал:

    // bind form using 'ajaxForm' 
    $('#myForm1').ajaxForm(options); 


С нетерпением жду ваших предположений. Заранее благодарен.

  Ответить  
 
 автор: sim5   (16.11.2009 в 23:20)   письмо автору
 
   для: Zend72   (16.11.2009 в 22:58)
 

Я не знаю этого плагина, не читал о нем, но в данном случе получается, что неверно назначается событие, и оно обрабытывается у коллекции форм, а не у конкретной формы. Может быть требуется $.element.bind, для конкретного элемента (кнопки submit)?

  Ответить  
 
 автор: Zend72   (16.11.2009 в 23:29)   письмо автору
 
   для: sim5   (16.11.2009 в 23:20)
 

Я тоже так считаю... sim5, вы случайно не знаете подобного плагина для JQuery?

  Ответить  
 
 автор: sim5   (16.11.2009 в 23:35)   письмо автору
 
   для: Zend72   (16.11.2009 в 23:29)
 

Я знаю о его существовании :), но никогда его не подключал и даже не читал о нем. У вас ситуация типа:
$('p').bind('click', alert())...
и все параграфы на странице будут "материться". Нужно почитать о методах этого плагина, должны же быть в нем прописаны "правила применения" )

  Ответить  
 
 автор: Zend72   (17.11.2009 в 15:21)   письмо автору
 
   для: sim5   (16.11.2009 в 23:35)
 

Фуф ;-) Зря я на этот плагин обижался - он прекрасно работает! Проблема была в том, что эти две формы браузер "рассматривал" как одну! Точная причина такого поведения мне неизвестна, но полагаю, это происходило из-за символов в кодировке Windows-1251 (хотя скрипт сохранен в кодировке UTF-8) которые попали в код в результате копипаста со старого скрипта.

Что касается плагина то в его исходном коде присутствует следующий комментарий:

/*
    Usage Note:
    -----------
    Do not use both ajaxSubmit and ajaxForm on the same form.  These
    functions are intended to be exclusive.  Use ajaxSubmit if you want
    to bind your own submit handler to the form.  For example,

    $(document).ready(function() {
        $('#myForm').bind('submit', function() {
            $(this).ajaxSubmit({
                target: '#output'
            });
            return false; // <-- important!
        });
    });


    Use ajaxForm when you want the plugin to manage all the event binding
    for you.  For example,

    $(document).ready(function() {
        $('#myForm').ajaxForm({
            target: '#output'
        });
    });

    When using ajaxForm, the ajaxSubmit function will be invoked for you
    at the appropriate time.
*/


Надо было сразу в исходник смотреть! ;-) sim5, спасибо за наставление меня на путь истинный насчет правил применения.

PS
Вот так выглядит полностью рабочий и даже валидный код:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>test</title>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="jquery.form.js"></script>

<script type="text/javascript">
    $(document).ready(function() {
        $('#myForm').bind('submit', function() {
            $(this).ajaxSubmit({
                target: '#ToUpdate'
            });
            return false; // <-- Важно!
        });
    });
 
</script>

</head>
<body>

  <div>
    <p id="ToUpdate" style="border: solid 1px #00FF00"></p>
  </div>

<form action="handler.php" method="post"  id="addcom">
    <fieldset>
    <legend>&nbsp;Оставить комментарий&nbsp;</legend>
        <label for="firstname">Ваше имя:</label>
        <input type="text" name="id_article" id="firstname" value="test">
        <input type="submit" value="Отправить">
    </fieldset>
</form>

<form action="uploadfilejshandler.php" method="post" id="myForm">
    <fieldset>
    <legend>&nbsp;Загрузить фото&nbsp;</legend>
        <label for="photo">Фото:</label>
        <input type="file" name="pic" value="" id="photo">
        <input type="submit" value="Загрузить">
    </fieldset>
</form>


</body>
</html>

  Ответить  
 
 автор: sim5   (18.11.2009 в 04:21)   письмо автору
 
   для: Zend72   (17.11.2009 в 15:21)
 

Ну вот, достаточно почитать толмут и все как по маслу )
Вот только как таковое возможно, чтобы браузер воспринимал несколько форм как одну, без помощи автора кода? ;-)

  Ответить  
 
 автор: Zend72   (18.11.2009 в 17:02)   письмо автору
 
   для: sim5   (18.11.2009 в 04:21)
 

Естественно браузер воспринимал несколько форм как одну из-за моей оплошности. ;-) Текст в UTF-8, как оказалось в последствии, содержал в себе левые символы в некой другой кодировке (какой черт его знает то ли Windows-1251, то ли еще в какой-то. А может и не в кодировке, а вообще какой либо бинарный код ;-)), которые попали туда в результате копипаста с PDF документа. Вот от этого и наблюдалось такое поведение...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования