【问题标题】:How to load json with focus event only once如何只加载一次带有焦点事件的json
【发布时间】:2017-06-21 13:02:17
【问题描述】:

我有focus 的基本活动如下:

(document).on("focus", '#checkin,#checkout', function() {
  $.getJSON('data.json', function(data) {
    //load here...
  });
});

我想加载我的 json 数据,实际上当我专注于我的输入时,代码会按预期工作。json 数据已经加载,但如果我专注于我的输入两次,我会看到结果..

我如何加载我的 json 数据当我集中输入一次时

Plunker Demo With Full Project

【问题讨论】:

  • 所有相关代码都直接属于您的问题。
  • 你是什么意思?
  • 这可能意味着什么?你应该去阅读How to Ask,可能。
  • 除此之外,看起来您实际上并没有在等待您的 AJAX 请求完成......所以您只是使用 previous AJAX 请求(在第一个焦点事件中显然不存在。)
  • 加载页面时需要关注输入标签还是什么?

标签: javascript jquery html css json


【解决方案1】:

获取json数据时可以使用此代码:

  $.getJSON('data.json', function(data) {
     element.find('#checkin').focus();
     element.find('#checkout').focus();
  });

【讨论】:

  • 真正的问题在这里:plnkr.co/edit/zp2zs6m9QzOY6J6lXwqx?p=preview 如果你关注输入,你会看到问题..当我只关注我的输入一次时,datepicker 会显示,但当我关注两次时它会显示。跨度>
【解决方案2】:

您可以使用布尔标志来测试事件是否已被触发:

var focused = false;
$(document).on("focus", '#checkin,#checkout', function() {
  if (!focused) {
    console.log('focused!!');
    focused = true;
  }
});

演示:

var focused = false;
$(document).on("focus", '#checkin,#checkout', function() {
  if (!focused) {
    console.log('focused!!');
    focused = true;
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="checkin" />

<input id="checkout" />

或者,您可以使用jQuery .off() 方法删除事件处理程序或使用.one() method 仅绑定一次。

【讨论】:

  • 感谢这个演示:plnkr.co/edit/j0cUMeSHNlEC5lf8C3LD?p=preview 我试过了,但它和以前一样工作
  • 我认为问题在于日期选择器之外,我的焦点功能也可以作为您的代码工作,但问题是:我的日期选择器在我聚焦两次时打开,但当我只聚焦一次时它必须两次
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
  • 1970-01-01
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
  • 1970-01-01
  • 2017-03-07
相关资源
最近更新 更多