我想在选择某些文本并将其拖入其中时读取输入的值,因此我会收听“drop”事件:
$input.on('drop', function() {
console.log($input.val());
});
这样我得到的旧值(在Chrome 45,Firefox 41,Opera 32,Internet Explorer 9上测试;在Safari 5.1上drop
事件未被触发,我想这是由于旧版本没有支持HTML5)。
为了解决这个问题,我在短暂超时后安排了该函数,以使新值可读:
$input.on('drop', function(e) {
window.setTimeout(function() {
console.log($input.val());
}, 100);
});
它有效,但我问:
preventDefault()
方法,我可以理解为什么该值尚未更新。)答案 0 :(得分:1)
是的,这是默认行为。 (这是正确的,但大多数时候都不是所希望的。)
否 - 在当前实现中,drop事件中的数据不可用。如果它会回答,那就是evt.originalEvent.dataTransfer.items。
你实际看到的看起来像一个竞争条件。您通常可以通过执行setTimeout(function(){ ... }, 0);
来解决这些问题。当它是一个“真正的”竞争条件时,您可以使用0作为超时。例如setTimeout
。
这个对您的代码起作用,我个人觉得change
为0而不是任意数字更为舒服 - 这是一个可接受的解决方法,IMO。
当然,您可以使用name age
---- ----
din 18
mari 35
事件 - 这是一个选项吗?