2013-12-24 4 views
2

Может потребоваться много времени, чтобы завершить call.php и получить возвращаемое значение, как я могу изменить значение кнопки отправки на «Обработка ...» во время выполнения вызова. Php?Изменить значение кнопки отправки

кнопку Submit с идентификатором "submit_btn", нет никаких изменений в сценарий

$('#submit_btn').val('Processing …')

AJAX код

$(document).ready(function(){ 
    $('#form1').submit(function(e) { 
     e.preventDefault(); 
     $('#submit_btn').val('Processing ...'); 
     $.ajax({ 
     cache: false, 
     type: "POST", 
     dataType: "json", 
      data: $('#form1').serialize(), 
     url: $('#form1').attr('action'), 
     complete: function (HttpRequest, textStatus) { 
       $('#submit_btn').val('Create'); 
     }}); 
     return false; 
    }); 
}); 

HTML

<form action="call.php" method="POST" id="form1" name="form1"> 
     <input type="text" name="campname" id="campname"> 
     <textarea id="longdesc" name="longdesc"></textarea> 
     <input type="text" name="vercode" id="vercode" /> 
     <input type="submit" value="Create" id="submit_btn" /> 
</form> 

ответ

2

Для простой формы из одного HTML-файла, $ ('# submit_btn') Кнопка Вэл ('Обработка ...') ('Обновить')..; работает, но НЕ на нескольких страницах jQuery.

HTML

<form action="test.php" method="POST" id="form1" name="form1"> 
    <fieldset> 
     <input type="text" name="field1" id="field1" /> 
     <input type="button" value="Button" name="btn01" id="btn01" /> 
     <input type="submit" value="Submit" id="submit_btn" /> 
    </fieldset> 
</form> 

AJAX

$(document).ready(function() { 

    $('#form1').submit(function (e) { 
     e.preventDefault(); 
     $('#submit_btn').val('Processing …').button('refresh'); 
     $.ajax({ 
      type: "POST", 
      dataType: "json", 
      data: $('#form1').serialize(), 
      url: $('#form1').attr('action'), 
      complete: function (HttpRequest, textStatus) { 
       $('#submit_btn').val('Submit').button('refresh'); 
      } 
     }); 
     return false; 
    }); 
}); 

Демонстрационная страница:.. http://jsfiddle.net/yckelvin/C6kzr/

Для нескольких страниц JQuery, $ ('# submit_btn') предыдущий() текст ("Обработка ... ").

HTML

<!-- HOME Page --> 
<div data-role="page" id="page1"> 
    <div data-theme="b" data-role="header" data-position="fixed"> <a href="#menu" data-icon="bars" class="ui-btn-left">Menu</a> 

    </div> 
    <!-- Panel Page ----> 
    <div data-role="panel" id="menu" data-display="overlay"> 
     <ul data-role="listview"> 
      <li><a href="#formpage" data-prefetch="false">Goto Form Page</a> 

      </li> 
     </ul> 
     <p><a data-role="button" data-rel="close">Close</a> 

     </p> 
    </div> 
</div> 
<!-- Form Page --> 
<div data-role="page" id="formpage" data-add-back-btn="true"> 
    <div data-role="content"> 
     <form action="test.php" method="POST" id="form1" name="form1"> 
      <fieldset> 
       <input type="text" name="field1" id="field1" /> 
       <input type="button" value="Button" name="btn01" id="btn01" /> 
       <input type="submit" value="Submit" id="submit_btn" /> 
      </fieldset> 
     </form> 
    </div> 
</div> 

AJAX

$(document).ready(function() { 

    $('#form1').submit(function (e) { 
     e.preventDefault(); 
     $('#submit_btn').prev().text("Processing ...").delay(1000); 
     $.ajax({ 
      type: "POST", 
      dataType: "json", 
      data: $('#form1').serialize(), 
      url: $('#form1').attr('action'), 
      complete: function (HttpRequest, textStatus) { 
       $('#submit_btn').prev().text('Submit'); 
      } 
     }); 
     return false; 
    }); 
}); 

Демонстрационная страница: http://jsfiddle.net/yckelvin/V5mSv/

+0

Это похоже на мой код, за исключением части задержки, которую я советую вам не использовать (потому что вы не можете ретранслировать по скорости интернет-пользователя: D) и проверить ответ @ r3mus с помощью опции beforeSend. Ура! – NoSense

+0

Да, вы правы, задержка, которую я здесь использую, просто задерживает изменение текста на кнопку. Слишком быстро вернуться к «Отправить» без задержки. – Kelvin

0
$(document).ready(function(){ 
    $('#submit_btn').click(function(e) { 
     e.preventDefault(); 
     $(this).val('Processing ...'); // this did the trices 
     $.ajax({ 
     cache: false, 
     type: "POST", 
     dataType: "json", 
      data: $('#form1').serialize(), 
     url: $('#form1').attr('action'), 
     complete: function (HttpRequest, textStatus) { 
       $('#submit_btn').val('Create'); 
     }}); 
     return false; 
    }); 
}); 

WORKING DEMO

1

Использование $ajax «s beforeSend вариант:

$.ajax({ 
    cache: false, 
    type: "POST", 
    beforeSend: function() { ... }, 
    ... 
2

Я не очень уверен, но почему бы не попытаться изменить значение с помощью JQuery на клик?

Что-то вроде:

$('#submit_btn').click(function(){ 
    $(this).val("your value") 
}) 

... или просто изменить в коде представить с нажмите :)

------------ --EDIT (на основе кода автора) ----------------

Значение кнопки не изменяется, поскольку в jquery вы используете стиль, основной ввод ввода путем применения пролет над ним. Таким образом, щелчок Вы должны будете изменить текст в этом диапазоне.

Вот DEMO

+0

Функция нажмите не будет хорошо работать здесь.Если пользователь нажал кнопку ввода, чтобы отправить форму, это никогда не изменит значение кнопки. –

+0

@ Justin - ах, мне нужно это сделать, но если он не работает, вы можете использовать событие Enter key ... но оно слишком слабое ... Параметр Ajax beforeSend, возможно, является лучшим решением, которое может получить автор. – NoSense

+0

@ Justin - я сделал демо - http://jsfiddle.net/6zjCZ/1/. Кнопка ввода также меняет значение :) – NoSense

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