$('#textboxId').val() 返回旧值(浏览器缓存问题)
$('#textboxId').val() returning old value (browser cache issue)
尽管花了几个小时,我还是想不通。我有一个简单的动态创建的页面(使用控制器加载的 vbhtml),其中包含两个文本框。
页面上有一个保存按钮。此按钮调用页面内的 Javascript 函数。在函数中,我有这些行:
function saveData()
{
var lDescr = $('#FundNote').val(); // FundNote is the id of a textbox
var DocUrl = $('#DocUrl').val(); // DocUrl is the id of another textbox
alert(lDescr);
alert(DocUrl);
//ajax call to a controller
}
问题是,每次显示此页面时,这些变量都会继续返回与第一次输入的值相同的值。如果我清理浏览器缓存,则会返回新输入的值,但会一直返回相同的值,直到再次清理浏览器缓存。 每次显示此页面时,文本框都是空的,用户输入值,因此页面本身不会保留值。
有什么指示吗?
更新
花了几天时间后,这就是我(暂时)修复它的方式。
看起来,即使控制器正在发送更新的 html 并且在浏览器上显示正常(html 包含一个下拉框,该下拉框动态填充不同的值。 每次值不同时,但在javascript中,都会返回旧值(例如,选择选项的旧值,该值甚至不包含在html的当前呈现中)。仍然不知道为什么会发生这种情况。 解决方案中还有其他类似的页面,它们工作正常。
无论如何,我所做的(现在让它工作),我在类中添加了一个 RandonNo() 属性,该属性动态创建此 html(通过控制器和 vbhtml 文件)。然后在 vbhtml 中,我将这个 randon 编号附加到所有 html 组件 ID 中。 我也像这样OnClick="Save('@Model.RandonNo')
将相同的数字传递给 javascript "Save()
"函数。 在保存方法中,我更改了$('#idOption') to $('#idOption-'+ randomno)
. 它似乎正在工作,因为每次 id 都不同。
我知道这是一个古老的问题,但我觉得它需要一个解决方案,因为jQuery仍在这样做。 我一直遇到非常相似的问题,但最终能够找到解决方法。 问题似乎出在 .val( ) 中。 出于某种原因,jQuery希望在用于获取/设置输入时自动填充缓存中的输入。 在我的情况下,我正在做这样的事情:
文件:
<form ...>
<input type="hidden" name="my_value" value="X" />
</form>
JS文件:
$( document ).ajaxSuccess( function ( event, jqxhr, settings, data ) {
if ( settings.dataType == 'json' && data && data.my_value ) {
$( 'input[name="my_value"]' ).val( data.my_value );
}
} );
如果我在不清除缓存的情况下刷新页面,则输入将自动被初始页面请求中 AJAX 请求中的缓存值覆盖,即使它们已经填充了服务器响应中的值。 为了解决这个问题,我将 .val( ... ) 更改为 .attr( 'value', ...),因此:
$( 'input[name="my_value"]' ).val( data.my_value );
成为
$( 'input[name="my_value"]' ).attr( 'value', data.my_value );
所以我认为你需要在这里做的是解决你的问题,只需改变:
var lDescr = $('#FundNote').val(); // FundNote is the id of a textbox
var DocUrl = $('#DocUrl').val(); // DocUrl is the id of another textbox
自
var lDescr = $('#FundNote').attr( 'value' ); // FundNote is the id of a textbox
var DocUrl = $('#DocUrl').attr( 'value' ); // DocUrl is the id of another textbox
我不确定这是jQuery本身还是导致此问题的插件,但这真的很奇怪。 似乎如果您在任何时候使用 .val( ) 从/到输入获取/设置值,如果您稍后刷新或再次访问该页面,则会导致输入的值被缓存值损坏。 这种损坏似乎不会在调用 .val( ) 时发生,而是在加载文档时发生。
总而言之,对输入的 get/set 的 .val( ) 调用会导致在初始页面请求期间缓存返回/设置的值。 将来的请求将在文档加载后使用初始请求期间返回/设置的值损坏输入的值,直到您清除浏览器缓存。
有时浏览器会缓存表单输入值,因此如果您返回页面,则无需重新键入内容。 要禁用它,请设置 <form ... autocomplete="off">
。 这将阻止表单重新加载用户上次在页面加载时键入的内容。
的问题,而是您关心的是输入中的文本不是从.val()
返回的文本。 如果是这种情况,请显示一些代码,让我们深入研究。
不要缓存值 (.val()),缓存 jQuery 对象: function saveData() {
var lDescr = $('#FundNote'); // FundNote is the id of a textbox
var DocUrl = $('#DocUrl'); // DocUrl is the id of another textbox
alert( lDescr.val() );
alert( DocUrl.val() );
//ajax call to a controller
}
我遇到了同样的问题,经过一些尝试,我发现了一种适合我的替代方案......
$("#id").valueOf().valueOf().valueOf().val();
可能看起来有些"奇怪"的解决方案,但它有效!
我遇到了同样的问题,我用attr("value")
切换了val()
来修复它。
- 跨浏览器问题:如何调试我的网站'在windows PC的safari上的行为
- DOM 操作、向后兼容性和跨浏览器问题
- 这是HTML5和javascript的浏览器问题吗
- Javascript Array 跨浏览器问题
- 斯克罗尔移动浏览器问题
- 当单击 shift + 鼠标左键单击时,Internet Explorer 浏览器问题 ,文本会自动突出显示
- Javascript跨浏览器问题
- jquery AJAX 获取请求跨浏览器问题
- 脚本标记的跨浏览器问题
- PhoneGap外部浏览器问题
- 使用jQuery Mobile时出现跨浏览器问题
- 在发布到服务器之前进行一些客户端验证 - 浏览器问题
- onLoad中未加载JavaScript(Android webView浏览器问题)
- DIV滚动器的跨浏览器问题
- 浏览器问题:分支选择下拉菜单在IE 7或8中不支持
- 表单提交的跨浏览器问题
- Internet Explorer浏览器问题:浏览器不提交POST数据与Ajax请求,服务器/客户端挂起
- 检查用户名是否存在-跨浏览器问题!建议
- JavaScript验证的跨浏览器问题
- Chrome浏览器问题:“加载资源:net::ERR_CONNECTION_TIMED_OUT”失败