2015-02-16 4 views
2

Мне нужна ваша помощь. Я создал этот простой скрипт. Моя цель - обновить мою базу данных текстом внутри текстового поля этой формы. Проблема в том, что скрипт работает только во второй раз, когда я нажимаю кнопку отправки. По какой-то неизвестной причине (по крайней мере для меня) это не работает в первый раз. Можете ли вы мне помочь, пожалуйста?Кнопка JQuery и Submit

<script> 
$(document).ready(function(){ 
$("#form_dove").submit(function(e){ 
    e.preventDefault(); 
     $("#click_dove").click(function(){ 
      testo = $("#textarea_dove_2").val(); 
      alert(testo); 
      data = 'testo='+testo; 
       $.ajax({ 
         type:"POST", 
         url:"php/update_dove.php", 
         data: data, 
         cache: false, 
         success: function(html){ 
         $('#textarea_dove_2').val(html); 
         alert('Aggiornato!'); 
         } 
         }); 
        }); 
        }); 
       }); 
     </script> 

<form name="form_dove" method="post" id="form_dove"> 
<div id="textarea_dove"> 
<textarea rows="17" cols="90" name="textarea_dove_2"     id="textarea_dove_2" > 
<?php echo("$testo_dove"); ?> 
</textarea> 
</div> 
<div id="form_submit_dove"> 
<input type="submit" value="SALVA E AGGIORNA" id="click_dove"> 
</div> 
</form> 

ответ

0

В вашем случае вызов ajax выполняется в обработчике нажатия кнопки, но обработчик нажатия кнопки зарегистрирован в обработчике отправки формы, поэтому только после отправки первой формы (запускаемой кнопкой отправки щелкните) обработчик события клика, который выполняет вызов ajax, будет зарегистрирован.

Решение: Вам не нужно обработчик события щелчка, переместите вызов Ajax в обработчик события представить

$(document).ready(function() { 
    $("#form_dove").submit(function (e) { 
     e.preventDefault(); 
     testo = $("#textarea_dove_2").val(); 
     alert(testo); 
     data = 'testo=' + testo; 
     $.ajax({ 
      type: "POST", 
      url: "php/update_dove.php", 
      data: data, 
      cache: false, 
      success: function (html) { 
       $('#textarea_dove_2').val(html); 
       alert('Aggiornato!'); 
      } 
     }); 
    }); 
}); 
+0

Спасибо за всю информацию, как только я вернусь домой, я буду стараться коды :-) –

+0

хорошо как скрипт работает, но у меня есть еще одна проблема .. сценарий PHP выполняется, но текст прошел для скрипта php является оригинальным, а не тем, что я набрал, прежде чем нажимать кнопку отправки Чтобы лучше понять (извините за мой английский), когда я загружаю страницу в текстовое поле, написано: «привет». Затем я редактировал текстовое поле, и я пишу: «привет 123». Когда я нажимаю кнопку отправки, сценарии передают первую строку, а не вторую. –

+0

Я провел небольшое исследование с использованием Google. Я обнаружил, что проблема может быть редактором TinyMCE. Да, я использую это, извините, что не упоминал об этом раньше, но я не знал, что это может быть характер моей проблемы. Я использую версию 4.1.7 редактора TinyMCE. Не могли бы вы мне помочь? Спасибо за терпение и помощь, действительно очень ценю! Davide, –

1

$("#click_dove").click находится внутри представить.

Это означает, что щелчок активируется только после отправки формы. Код ясен :)

0

Вам не нужно две функции здесь. Функция $ ("# form_dove"). Submit вызывается при отправке формы и $ ("# click_dove"). Функция click вызывается при нажатии кнопки.

Поскольку вы указали определение функции щелчка внутри функции отправки, функция щелчка не была объявлена ​​(т. Е. Не существовала) до тех пор, пока форма не была отправлена ​​(т. Е. При первом нажатии кнопки). Затем, во второй раз, когда была нажата кнопка, функция click сделала ваш ajax материал.

В этом случае проще всего выполнить необходимую обработку в функции отправки - это то, что вы хотите, чтобы отправить форму. Используйте функцию щелчка, если вам нужно сделать некоторую проверку, чтобы увидеть, была ли форма заполнена правильно, прежде чем отправлять ее.

<script> 
$(document).ready(function(){ 
    $("#form_dove").submit(function(e){ 
     e.preventDefault(); 
     testo = $("#textarea_dove_2").val(); 
     alert(testo); 
     data = 'testo='+testo; 
     $.ajax({ 
       type:"POST", 
       url:"php/update_dove.php", 
       data: data, 
       cache: false, 
       success: function(html){ 
        $('#textarea_dove_2').val(html); 
        alert('Aggiornato!'); 
       } 
     }); 
    }); 
    $("#click_dove").click(function(){ 
     //put some validation in here if you want 
    }); 
}); 
</script>