Chrome没有正确地将值应用于正在被“刷新”的输入;观看”;
Chrome does not correctly apply value to input that is being "watched"
我有一个隐藏的表单,它与一个更图形化/用户友好的界面相连,其中一个隐藏输入被以下功能"监视":
$('#mag-pg input')[0].watch('value', function(prop, oldval, newval){
if(printRef instanceof Object){
var curSz = $('#mag-sz input').val();
toggleBtn($('#mag-sz button'), 'inactive');
for(u in printRef[newval]){
toggleBtn($('#mag-sz button[value='+u+"]"), 'active');
}
$('#mag-sz button[value='+curSz+']').click();
}
updateOrderInfo();
console.log(newval);
return newval;
});
手表功能如下:
if (!Object.prototype.watch) {
Object.defineProperty(Object.prototype, "watch", {
enumerable: false
, configurable: true
, writable: false
, value: function (prop, handler) {
var
oldval = this[prop]
, newval = oldval
, getter = function () {
return newval;
}
, setter = function (val) {
oldval = newval;
return newval = handler.call(this, prop, oldval, val);
}
;
if (delete this[prop]) { // can't watch constants
Object.defineProperty(this, prop, {
get: getter
, set: setter
, enumerable: true
, configurable: true
});
}
}
});
}
这非常有效,直到我尝试提交隐藏表单。问题是Chrome没有提交正在观看的隐藏输入的值。这很奇怪,因为使用控制台检查输入的值会返回正确的值。我已经使用fiddler检查了HTTP请求,输入的值肯定没有发送到服务器。因此,Chrome似乎没有正确地将新值应用于输入,尽管控制台会建议不要这样做。我想知道是否有人以前见过这个,或者我的手表是否出了问题。
我不想摘下手表,因为它的目的是确保同步。这个应用程序很复杂,如果没有被关注的价值,应用程序的不同部分很容易在应该更新的时候不更新。
每隔一个浏览器都会将输入值正确地提交给服务器。
手表的实现有点。。。。不完整。也许这会更好用?https://gist.github.com/3196198
相关文章:
- 从MySQL数据库中获取输入数据需要两次页面刷新
- 更新其中一个字段时刷新其他输入字段.使用Angularjs(附Plunker)
- 点击页面刷新;重新显示两个输入元素
- Chrome没有正确地将值应用于正在被“刷新”的输入;观看”;
- 自动刷新内容,但如果关注此内容中的某个输入,则不刷新
- 输入文件:如何在刷新后显示文件名
- AJAX/JS:抓取多个输入字段而不刷新或点击按钮,php会回显该值
- 自定义CSS输入框,使页面按ENTER键刷新
- JS/Ajax:抓取输入字段值,无需刷新或点击按钮
- JS/AJAX:提交时不刷新或按钮单击不触发输入
- AJAX/JS:是否可以在没有提交按钮和刷新页面的情况下获取输入文本的值
- 自动刷新输入时间对象,无需重新加载页面
- 在检票口中刷新页面后重新聚焦输入字段
- 输入最后一个字段后自动提交/刷新信息路径表单
- 如何在不刷新的情况下将表单输入附加到变量
- 我使用jquery创建输入字段,刷新页面后如何保持这个“新输入值”的存在
- 在输入字段更改时刷新 Javascript 变量
- 如何在页面刷新后保留输入单选按钮的状态
- 刷新输入:使用Jquery Mobile从iframe接收无线电
- Sencha touch:如何刷新输入标签