2013-07-10 4 views
1

как указано выше preventDefault не работает, ни return false, ни stopImmediatePropagation, попробовал все, что мог найти/подумать, но он не работает. Моя страница перенаправляет меня обратно на мой первый выбор после ввода всех необходимых полей и нажатия на кнопку. Он должен перенаправить меня в текстовое поле не в первый выборpreventDefault, return false не работает

в HTML ->

<!DOCTYPE HTML> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>Sig Generator</title> 
    <script type="text/javascript" src ="jquery-2.0.3.min.js"></script> 
    <script type="text/javascript" src="sig.js"></script> 
</head> 
<body> 
    <div id="legalform" align ="center"> 

      Rechtsform auswählen:<br><br> 
      <select id="selection" size="1">   
      </select><br><br> 

      <input id="sendLegalForm" type="button" value ="Weiter"/>   
    </div> 

    <div id="fields" align="center"> 
      <form id="fieldsForm" > 
      <br> 
      <br>  
      <input id="sendFields" type="submit" value="Weiter"/> 
      </form> 

      <br> 

    </div> 

    <div id="display" > 


     <textarea id="textarea" cols="30" rows="20"></textarea> 

    </div> 

</body> 
</html> 

и JQuery ->

$(document).ready(function() { 

    var $selection =""; 

    $.ajax({ 
     type:'GET', 
     url:'http://localhost/php/sig.php?legalforms=true', 
     dataType:'json', 
     success: function (data){ 
      $("#display").hide();  
      var selection = []; 
      for(var i = 0; i<data.length; i++){ 
       selection.push('<option>', data[i],'</option>'); 
      } 
      $("#selection").html(selection.join(''));    
      $("#fields").hide(); 
     }, 
     error: function(jqXHR,textStatus,errorThrown){ 
      console.log(jqXHR); 
      console.log(textStatus); 
      console.log(errorThrown); 
     } 
    }); 

    $("#sendLegalForm").click(function() {  
     selection = $('#selection').val(); 
     $.ajax({ 
      type:'GET', 
      url:'http://localhost/php/sig.php?selectedLegalform='+ selection, 
      dataType:'json', 
      success: function (data){ 

       $("#legalform").hide(); 
       $("#fields").show(); 
       var fieldnames =[]; 
       for(property in data.namesToSubmit){ 
        fieldnames.push(property); 
       }     
       var fields=[]; 
       for(var i=0; i<data.textfieldHeaders.length; i++){    
       fields.push(data.textfieldHeaders[i],'<br>','<input name="',fieldnames[i],'" type="text"              ',data.namesToSubmit[fieldnames[i]] == "required"?"required":"",'>','<br/>');   
       }     

       fields.push("<br>", 'Pflichtfelder (*)'); 
       $("#fieldsForm").prepend(fields.join(''));    
      }, 
      error: function(jqXHR,textStatus,errorThrown){ 
       console.log(jqXHR); 
       console.log(textStatus); 
       console.log(errorThrown); 
      } 
     }); 
    }); 

    //i have tried with the id of the form and button 
     $("#fieldsForm").on('submit',function(e){ 
      e.preventDefault(); 
     // e.stopImmediatePropagation(); 
      $.ajax({ 
      type:'POST', 
      url: 'http://localhost/php/sig.php?fieldsend='+selection, 
      data: $("#fieldsForm").serialize(), 
      success: function (data){     
      $('#fields').hide(); 
      $('#display').show(); 
      $("#textarea").html(data); 
      }, 
      error: function(jqXHR,textStatus,errorThrown){ 
      alert('Bitte alle Pflichtfelder ausfüllen.'); 
       console.log(jqXHR); 
       console.log(textStatus); 
       console.log(errorThrown); 
      } 
     }); 

    }); 

}); 
+0

Попробуйте это $ ("# fieldsForm"). Off ("submit"). On ("submit" ...). Или также $ ("# fieldsForm"). Unbind ("submit"). Bind ("submit" ...). Дайте мне знать, если это сработает. – gustavodidomenico

+0

Когда вы начинаете «новую» функцию, область действия * event e * ограничена этой новой функцией ... Если бы вы могли предложить jsFiddle, было бы намного легче помочь. –

+0

@gustavodidomenico это работает!, Я сделал это с этим $ ("# fieldsForm"). Off ("submit"). On ('submit', function (e) { \t \t e.preventDefault(); ... вы можете объяснить, почему? Я не понимаю, почему это работает :) – Adrian

ответ

0

Как я уже говорил, этот код должен решить вашу проблему:

$("#fieldsForm").off("submit").on('submit', [your function]); 

То, что я делаю выше, - это удалить все связанные события и повторить попытку с тем, что я хочу.

Существует несколько причин, может сделать код работает, например:

  1. Ваш являются обязательными событие более чем один раз, так что wont't работа preventDefault (но это должно быть).
  2. Вопросы совместимости с используемой версией jquery. Поскольку эта ошибка была решена в более ранних версиях.
+0

хорошо, может быть, это что-то, связанное с другими событиями, и я использую jquery-2.0.3.min.js, и это должно быть самое новое, я думаю – Adrian

+0

Осторожно с jquery 2.0, он удалил набор функций obcelete 1.x, а некоторые фреймворки, которые используют jquery, не обновляются. Рассмотрите возможность использования jquery migrate, чтобы избежать проблем с обратной совместимостью. – gustavodidomenico

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