应该是这样 <input type='text' id='_T' name='_T' onkeyup="this.value=this.value"> <script> var t = document.getElementById('_T'); t.watch("value", function(eventObj, oldval, newval) {alert('changed!');return newval;}); </script>为什么需要onkeyup="this.value=this.value"呢
Watches for assignment to a property named prop in this object, calling handler(prop, oldval, newval) whenever prop is set and storing the return value in that property. A watchpoint can filter (or nullify) the value assignment, by returning a modified newval (or oldval). If you delete a property for which a watchpoint has been set, that watchpoint does not disappear. If you later recreate the property, the watchpoint is still in effect. 这个原来是用来做什么的呢
<script type="text/javascript"> (function () { //键盘控制 var data = {}; document.onkeydown = function () { var e = window.event || arguments[0], k = e.keyCode || e.which; if (!data[k]) { data[k] = k; document.body.innerHTML += k + ":按下了<br \/>"; } }; document.onkeyup = function () { var i, e = window.event || arguments[0], k = e.keyCode || e.which; delete data[k]; document.body.innerHTML += k + ":离开了<br \/>"; }; })(); </script>
晕倒,那个只是一个键盘变化的捕获,给你写了个你要的效果。。测试无问题。FF和OP下拖拽进入时候不会触发focus和blur。。不过当触发了会检索到变化 <script type="text/javascript"> var Class = { //创建类 create: function () { return function () { this.initialize.apply(this, arguments); }; } };var $A = function (a) { //转换数组 return a ? Array.apply(null, a) : new Array; };var $ = function (id) { //获取对象 return document.getElementById(id); };Object.extend = function (a, b) { //追加方法 for (var i in b) a[i] = b[i]; return a; };Object.extend(Object, { addEvent : function (a, b, c, d) { //添加函数 if (a.attachEvent) a.attachEvent(b[0], c); else a.addEventListener(b[1] || b[0].replace(/^on/, ""), c, d || false); return c; },
delEvent : function (a, b, c, d) { if (a.detachEvent) a.detachEvent(b[0], c); else a.removeEventListener(b[1] || b[0].replace(/^on/, ""), c, d || false); return c; },
reEvent : function () { //获取Event return window.event ? window.event : (function (o) { do { o = o.caller; } while (o && !/^\[object[ A-Za-z]*Event\]$/.test(o.arguments[0])); return o.arguments[0]; })(this.reEvent); }
});Function.prototype.bind = function () { //绑定事件 var wc = this, a = $A(arguments), o = a.shift(); return function () { wc.apply(o, a.concat($A(arguments))); }; };var change = Class.create();change.prototype = { time : 10, timer : 0, //记时器和时间值static类型^o^
参考:http://community.csdn.net/Expert/topic/5524/5524226.xml?temp=.718075
看看先baidu上还看到用oninput的
也没用过也看看
<input type='text' id='_T' name='_T' onkeyup="this.value=this.value">
<script>
var t = document.getElementById('_T');
t.watch("value", function(eventObj, oldval, newval) {alert('changed!');return newval;});
</script>为什么需要onkeyup="this.value=this.value"呢
If you delete a property for which a watchpoint has been set, that watchpoint does not disappear. If you later recreate the property, the watchpoint is still in effect. 这个原来是用来做什么的呢
<input type='text' id='_T' name='_T' onkeyup="this.value=this.value">
<script>
var t = document.getElementById('_T');
t.watch("value", function(eventObj, oldval, newval) {dd.innerHTML+=1;return newval;});
</script>watch的方法还是不好啊
试试在文本框内按上下左右
值没有变但还是会触发
这样跟keyup有什么区别
用focus和blur 加 setInterval
模拟的话还能支持OP
blur时清除它?
这样总归不太好本来已经用了一个setTimeout来设置延迟了
主要是我需要即时的效果所以不用focus和blur
一开始我是用keyup的问题是用输入法时判断不了onreadystatechange是最符合我想要的效果但ff又没有类似的效果
即使你用keyup也判断不了拖拽。
你用setInterval和获得焦点,你把时间设置快点。比如说10延迟很低了已经。
(function () {
//键盘控制
var data = {};
document.onkeydown = function () {
var e = window.event || arguments[0], k = e.keyCode || e.which;
if (!data[k]) {
data[k] = k;
document.body.innerHTML += k + ":按下了<br \/>";
}
}; document.onkeyup = function () {
var i, e = window.event || arguments[0], k = e.keyCode || e.which;
delete data[k];
document.body.innerHTML += k + ":离开了<br \/>";
};
})();
</script>
例如在一个文本框
用keyup我可以判断按了什么键
是会修改内容的键就执行一次程序
但如果是输入法就判断不了
因为在输入法时根本判断不了内容什么时候会变
<script type="text/javascript">
var Class = {
//创建类
create: function () {
return function () {
this.initialize.apply(this, arguments);
};
}
};var $A = function (a) {
//转换数组
return a ? Array.apply(null, a) : new Array;
};var $ = function (id) {
//获取对象
return document.getElementById(id);
};Object.extend = function (a, b) {
//追加方法
for (var i in b) a[i] = b[i];
return a;
};Object.extend(Object, { addEvent : function (a, b, c, d) {
//添加函数
if (a.attachEvent) a.attachEvent(b[0], c);
else a.addEventListener(b[1] || b[0].replace(/^on/, ""), c, d || false);
return c;
},
delEvent : function (a, b, c, d) {
if (a.detachEvent) a.detachEvent(b[0], c);
else a.removeEventListener(b[1] || b[0].replace(/^on/, ""), c, d || false);
return c;
},
reEvent : function () {
//获取Event
return window.event ? window.event : (function (o) {
do {
o = o.caller;
} while (o && !/^\[object[ A-Za-z]*Event\]$/.test(o.arguments[0]));
return o.arguments[0];
})(this.reEvent);
}
});Function.prototype.bind = function () {
//绑定事件
var wc = this, a = $A(arguments), o = a.shift();
return function () {
wc.apply(o, a.concat($A(arguments)));
};
};var change = Class.create();change.prototype = { time : 10, timer : 0, //记时器和时间值static类型^o^
initialize : function (input) {
var wc = this;
wc.input = input; //对象
wc.value = input.value; //原始值记录
wc.sFunc = Object.addEvent(input, ["onfocus"], wc.top.bind(wc));
wc.eFunc = Object.addEvent(input, ["onblur"], wc.end.bind(wc));
},
check : function () {
//检索变化
var wc = this, input = wc.input, temp;
if (wc.value != input.value) { //如果和原始值不等
temp = [wc.value, input.value].sort(function (a, b) { //排序原始值和新值,得到最长的串
a = a.length, b = b.length;
return a >= b ? -1 : 1;
});
wc.value = input.value; //覆盖原始值
document.title = input.id + ":" + temp[0].replace(temp[1], ""); //利用长串替换短串得到变化值
}
},
top : function () {
//开始检索
var wc = this;
wc.timer = window.setInterval(function () {
wc.check();
}, wc.time);
},
end : function () {
var wc = this;
window.clearInterval(wc.timer);
wc.timer = 0;
wc.check(); //当离开的时候要检索最后一变
}
};window.onload = function () {
new change($("wc1"));
new change($("wc2"));
};
</script>
<input id="wc1" />
<input id="wc2" />