2012-06-26 18 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属性。仅当检查框中包含 复选框和单选按钮(“收音机”或“复选框”类型的输入) 的值。来自文件选择元素 的数据未被序列化。