- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 meteor 事件,它监视一组字段的变化,并相应地更新数据库。为了提高效率(如果误导请纠正我),我为该事件添加了一个限制,以便它最多每秒触发一次。
事件:
Template.TheForm.events({
"input #TheForm .field": _.throttle(function (event) {
// Update field
Meteor.call("updateForm", this._id, event.target.name, event.target.value, function(error, result){
// Do someting here
});
}, 1000) // Throttle to fire at most once every second
});
表格:
<form id="TheForm">
<fieldset id="person">
<legend>The person</legend>
<label for="name">Name</label>
<input id="name" type="text" name="name" class="field" value="{{ name }}" />
<label for="email">Email</label>
<input id="email" type="email" name="email" class="field" value="{{ email }}" />
</fieldset>
</form>
问题是,如果我填充一个字段并在 1000 毫秒超时内模糊它,则似乎只有第一个字符被拾取,即
“Nathan”快速输入name
字段并模糊地输入email
字段,看到数据库中的值返回为“N”。
我的理解是,._throttle
函数将获取字段值的最终结果 - 即使这意味着 1 秒后收集它。
来自docs :
By default, throttle will execute the function as soon as you call it for the first time, and, if you call it again any number of times during the wait period, as soon as that period is over. If you'd like to disable the leading-edge call, pass {leading: false}, and if you'd like to disable the execution on the trailing-edge, pass {trailing: false}.
主要逻辑似乎工作正常,因此开头的“N”,但是我没有调用 trailing: false
因此除非我误解了最终值应该始终被收集。
有什么想法吗?
最佳答案
两个字段都使用相同的事件处理程序,因此如果第二个字段在 1 秒内触发事件,第一个字段中的某些事件将被抑制。如果您在 1 秒内在 name
字段中输入“Nathan”,您的处理程序将被调用 name=N
,然后 1 秒后调用 name=Nathan
。但是,如果您切换到电子邮件字段并足够快地在其中输入一些字符(例如“nathan@e”),那么这些事件将导致 name=Nathan
事件被压制。在这种情况下,您将立即收到 name=N
并在 1 秒后收到 email=nathan@e
。
因此,解决方案是为每个输入字段设置一个单独的限制事件处理程序。您不一定需要多次复制粘贴事件处理程序 - 您可以使用如下方法:
var throttledFunctions = {};
["name", "email"].forEach(function (fieldName) {
throttledFunctions[fieldName] = _.throttle(function (context, event) {
Meteor.call("updateForm", context._id, event.target.name, event.target.value, ...)
}, 1000);
});
Template.TheForm.events({
"input #TheForm .field": function (event) {
throttledFunctions[event.target.name](this, event);
}
});
关于javascript - 下划线 _.throttle 如果在超时内发生模糊则忽略输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31987264/
执行此查询 INSERT INTO classes( '_fkUserID', 'date', 'time' ) VALUES ( '1', '2017-07-04', '8:15' ) 给
不知道它是否重复(无法找到要搜索的词,例如 “允许使用 java 字符”)。我在测试面试中遇到了这个问题: 考虑以下类: class _ {_ f; _(){}_(_ f){_ t = f; f =
我需要验证用户的屏幕名称以确保它不能有 多个连字符或下划线 我不希望人们的网名全是标点符号。 这是我到目前为止的验证: public boolean validateScreenName(String
我正在尝试检查我收到的新数据是否针对我持有的对象,我想知道的是,我正在发送的对象的键是否与我当前拥有的对象中的任何键匹配。 所以我捕获了一个像 myObj = [{"one": 1}, {"two":
这是我第一次使用下划线...我有这个简单的 json... "categories" : [ { "tag" : "cat1", "active" : true
一个很简单的问题: 为什么在WPF内容中看不到_(下划线)? 例如内容 显示为"testt"(未显示下划线)。 最佳答案 标签支持助记符(即您可以使用ctrl +(key)赋予它们焦点)。您可以使用
下面是我正在处理的简化逻辑,我想在数组中查找具有匹配位置(文件夹)的文件。 我能够使用普通的 JS 循环来实现此功能,您能建议更好/更简单/类似下划线的方法来实现此类功能吗? // source va
我正在尝试在对象的函数中查找和替换值 我的对象看起来像这样: var testStates = [{ "module": "module1", "customUrl": [
尝试让 _.uniq() 在以下结构上工作: [ {'x' : 1, 'y': 2}, {'x' : 1, 'y': 2}, {'x' : 2, 'y': 3}, {'
明白了: [{ "title": "qq", "dateValuePair": { "date": "2016-04-29T22:00:00.000Z", "va
我不知道这是否可能,但我试图做的是“清理”一个对象。基本想法是我有一个对象的表格(以 Angular ),然后单击我想添加一个新行(控制对象中的一个新项目,但我希望它没有值。我有下划线尝试一下。一些考
所以我有一大堆对象需要将其变成一个小对象。 它有 50-60 个对象,我需要过滤到一个新的对象数组中,其中只有 3 个。 所以看起来像 myOb = {{"ob1": 1},{"ob2": 1},{"
我有一个像这样的对象 - {"house" : red, "car" : green, "apple" : blue}; 并且正在发送另一个带有单个键/值的对象,如下所示 {"apple" : gre
我有一个包含多个对象的数组,例如 var val = [ _id: ["5412fc1bd123cf7016674a92", "5412cf270e9ca9b517b43ca3"],
所以我有一个对象列表,例如 var options = [{"car" : "red"},{"house": "green"},{"dog":"bark"}] 我正在尝试将其转换为一个值数组,
我正在尝试将此数组转换为对象。使用下划线,我想转换这个数组: [ { "id": "parentA", "children": [ { "nam
我正在尝试使用这样的链检索嵌套项目值。我正在遍历的对象如下所示: var testStates = [{ "module": "module1", "customUrl
我有一些内容可编辑的段落,我希望能够在双击时使某些单词加粗下划线。当我双击一个单词时,它会被选中,并显示一个包含 3 个选项的工具提示。但是,单击工具提示选项后,选择就会消失,并且文本不会发生任何更改
要在 CSS 中给文本加下划线,我们可以这样做: h3 {text-decoration:underline;} 然而,这只会强调包含在 h3 标签中的文本。如果想让下划线穿过页面怎么办? 谢谢 最佳
我正在尝试解决我的最后一个问题,但我仍然不知道如何解决它。我的任务是编写一个对数字进行排序的程序,但是:我们的导师给了我们一些处理数字的程序的额外要点,例如:000054667(实际上是 54667)
我是一名优秀的程序员,十分优秀!