2012-02-15 3 views
0

Я делаю форму с помощью jQuery's AJAX. Я иметь несколько форме, используя AJAX, как это:jQuery, AJAX - Запуск неправильных функций

$('#newUser').submit(function() { 
var dataString = $(this).serialize(); 

$.ajax({ 
    type: "POST", 
    url: "/includes/classes/handler.php?do=addLogin", 
    data: dataString, 
    success: function(returnedData){ 

     if(returnedData){ 
      $('.errorMessage').fadeIn().html(returnedData); 
     } else { 
      $('.sideBarNewUserWrap').fadeOut(); 
     } 

    } 
}); 
return false; 
}); 
// 

, а потом я с другой, как это:

$('#addLookup').submit(function() { 
var dataString = $(this).serialize(); 

$.ajax({ 
    type: "POST", 
    url: "/includes/classes/handler.php?do=addLookup", 
    data: dataString, 
    success: function(returnedData){ 

     if(returnedData){ 
      $('.errorMessage').fadeIn().html(returnedData); 
     } else { 
      window.location.href = ""; 
     } 

    } 
}); 
return false; 
}); 

И по какой-то причине, когда я wan't его, чтобы активировать # newUser запускает #addLookup. Если я удалю #addLookup, для #newUser не будет AJAX ИЛИ jQuery (браузер просто освежает, если я нажимаю «submit»).

формы выглядеть следующим образом:

<form method='post' action='#' id='newUser'></form> 

или

<form method='post' action='#' id='addLookup'></form> 

Как это может быть? Я смотрю на тот же код в течение 2 часов, и я не могу понять, что случилось.

Update

The #addLookup срабатывает только если 2 формы находятся на той же странице. Если #newUser стоит один на странице AJAX, запускает правильную функцию.

Полный HTML

<form method='post' action='#' id='addLookup'> 

    <div id='tilfojOpslagClose'><img src='/includes/images/design/btn/closeWindow-btn.png'></div> 

    <div class='successMessage'></div> 
    <div class='errorMessage'></div> 


    <div id='tilfojOpslagHeader'> 
     <input type='text' name='lookupHeader' id='lookupHeader' value='Skriv en overskrift'> 
    </div> 

    <div id='tilfojOpslagExpand'> 

     <div style='float:left;'> 
      <label>Præsentations tekst (bliver vist på forsiden)</label> 
       <textarea name='lookupSubHeader' id='lookupSubHeader' maxlength='100'></textarea> 
     </div> 
      <span id='lookupSubHeaderCharsLeftOutput'>Du mangler <strong>50</strong> tegn</span> 

     <div style='float:left;width:618px;margin:3px 0 0 0;'> 
      <textarea name='lookupContent' id='lookupContent' style='height:100px;'></textarea> 
     </div> 

     <div id='tilfojOpslagBottom'> 
      <div id='tilfojOpslagSubmit'><input type='submit' value='Opret mit opslag'></div> 
     </div> 
</form> 

И #newUser

<form method='post' action='#' id='newUser'> 
     <fieldset> 
      <legend>Ny bruger</legend> 
       <label>Brugernavn</label> 
        <input type='text' name='username' id='username' placeholder='Brugernavn vil forekomme på siden, som et alias'> 
       <label>E-mail</label> 
       <label style='color:#f00;font-size:8px;'>Ja, du skal skrive en gyldig e-mail. Du modtager et aktiverings link.</label> 
        <input type='text' name='email' id='email' placeholder='E-mail - en del af dit login'> 
       <label>Adgangskode</label> 
        <input type='password' name='password' id='password' placeholder='Adgangskode - en del af dit login'> 
       <input type='hidden' name='salt' id='salt' value='<?=uniqid(mt_rand())?>'> 
       <input type='submit' value='Opret mig'> 

       <div class='errorMessage'></div> 
       <div class='successMessage'></div> 
     </fieldset> 
     </form> 

UPDATE

<?if($_SESSION['loggedIn']){?> 
    <form action='' method='' id='addLookup'> 
<?} else {?> 
    <input type='submit' value='something'> 
    </form> 
<?}?> 
+0

Полный текст HTML + код – gdoron

+0

Вопрос только в том, как вы запускаете сообщения в форме? Где элементы submit/button/anchor запускают сообщение? – FarligOpptreden

+2

Надеюсь, что эти две формы не вложены ** ... – gdoron

ответ

1

Проблема со mes in из поведения кнопки SUBMIT. Конкретная подача внутри формы будет публиковать только содержащую ее форму. Я собрал быстрый jsFiddle, который иллюстрирует это. Если вы вызываете кнопку отправки, которая не содержится в форме, ни одна из форм не будет публиковать. Если вы вызываете определенную кнопку отправки, находящуюся в определенной форме, будет отправлена ​​только форма THAT.

Al Альтернатива может быть вручную размещать обе формы пути присоединения обработчика события OnClick для кнопки представляет ...

+0

Как я понимаю ваш ответ: кнопка отправки внутри определенной формы вызовет функцию идентификатора формы. И вот как я его уже получил, поэтому я не понимаю, почему он не работает? – skolind

+0

Он представляет форму, в которой он находится. Прочтите разметку снова – gdoron

+0

Нет ... Именно так ваш код ** ошибочен **. см. [JSfiddle] (http://jsfiddle.net/n8jXt/) из его кода – gdoron

1

попробовать с помощью preventDefault отменить представить событие также вы можете написать один обработчик для оба формы. попробуйте этот

$('#newUser,#addLookup').submit(function(e){ 
    e.preventDefault(); 
    var dataString = $(this).serialize(); 
    var id = $(this).attr('id'); 

    $.ajax({ 
     type: "POST", 
     url: "/includes/classes/handler.php?do="+id, 
     data: dataString, 
     success: function(returnedData){ 
      if(returnedData){ 
       $('.errorMessage').fadeIn().html(returnedData); 
      }else{ 
       // include as per your need 
      } 
     } 
    }); 
}); 
-2

Я не получил вашу проблему точно, но, кажется, что вы делаете POST с параметром передается в URL (который, как предполагается, ге ГЭТ). Таким образом, есть конфликт. Это может быть матерью всех проблем.

type: "POST", 
url: "/includes/classes/handler.php?do=addLookup", 
+0

Вы можете использовать регистрацию данных в запросе POST! – gdoron

Смежные вопросы