2012-06-26 50 views
0

我有一個表單自動提交和更新相同的頁面。我有一個改變按鈕值的java腳本函數,但AJAX不斷髮布舊值。ajax不斷髮布過時的值

AJAX

$.ajax({ 
      type: 'POST', 
      url: this.action, 
      data: $('form').serialize() 
}); 

JQUERY

function changevalue() 
{ 
$('#button').attr('value', 'grapes'); 
} 

FORM

form... 
<input type="submit" name="button" id="button" value="apple" onclick="changevalue();" /> 
... 

按鈕將顯示新的改變後的字,但後面的代碼(控制器)示出了舊變量。

+0

您是否在多個瀏覽器上遇到過這種情況,還是瀏覽器特定? – Nathan

+0

是的。 IE,Chrome和Firefox。清除緩存,重新啓動。沒有修復 – user999690

+0

你怎麼稱呼那個Ajax線?您沒有在上面的代碼示例中顯示。 – epascarello

回答

3

使用jQuery的.val()方法更改值。

function changevalue() { 
    $('#button').val('grapes'); 
} 

在jQuery 1.6.0中,.attr()方法正確地停止訪問和更改的屬性值,它僅改變屬性。

+0

同樣的問題。按鈕更新爲新的單詞「葡萄」,但後面的代碼具有舊的發佈價值。 – user999690

+0

@ user999690 jQuery的'.serialize'方法似乎甚至不會發送'type =「submit」'http://jsfiddle.net/9LnCz/的輸入,您可能需要使用其他方法發送該值,例如隱藏輸入或建立手動發送的數據。 –

1

您並未取消提交按鈕的默認操作,單擊該按鈕時,將刷新頁面,這意味着默認值將重新出現。

用代碼添加事件處理程序,而不是內聯標記。

<input type="submit" name="button" id="button" value="apple" /> 

<script> 
    $(function() { 
     $("#button").on("click", changevalue); //assign the click for 1.7+ 
     //$("#button").click(changevalue); //assign the click for 1.6.x and below 
    }); 

    function changevalue(evt) { 
     evt.preventDefault(); //cancel the click action 
     $(this).val("grapes"); //set the value with val, do not use attr 
    } 
</script> 

並從serialize

說明文檔:只有 「成功控制」 被序列化到字符串。 否 提交按鈕值被序列化由於表單未提交 使用按鈕。對於要包含在 序列化字符串中的表單元素的值,元素必須具有name屬性。僅當檢查框中包含 複選框和單選按鈕(「收音機」或「複選框」類型的輸入) 的值。來自文件選擇元素 的數據未被序列化。