在新值可用之前触发输入上的丢弃事件

时间:2015-10-14 20:01:01

标签: javascript jquery events

我想在选择某些文本并将其拖入其中时读取输入的,因此我会收听“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);
});

它有效,但我问:

  1. 这是默认行为吗?
    (如果在该级别可以应用preventDefault()方法,我可以理解为什么该值尚未更新。)
  2. 是否可以访问新值而无需等待偶数短暂超时?
    (我检查了事件属性,但遗憾的是没有找到有趣的东西)。

1 个答案:

答案 0 :(得分:1)

是的,这是默认行为。 (这是正确的,但大多数时候都不是所希望的。)

否 - 在当前实现中,drop事件中的数据不可用。如果它会回答,那就是evt.originalEvent.dataTransfer.items。 你实际看到的看起来像一个竞争条件。您通常可以通过执行setTimeout(function(){ ... }, 0);来解决这些问题。当它是一个“真正的”竞争条件时,您可以使用0作为超时。例如setTimeout

这个对您的代码起作用,我个人觉得change为0而不是任意数字更为舒服 - 这是一个可接受的解决方法,IMO。

当然,您可以使用name age ---- ---- din 18 mari 35 事件 - 这是一个选项吗?