获取JQuery Callback中的元素

时间:2015-08-11 14:46:47

标签: javascript jquery

我在jQuery Callback函数中遇到这个元素时遇到了麻烦。我已尝试过$(this)和$(this.element)的各种建议但没有成功。

EntityManager entityManager = getEntityManager();
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
entityManager.persist(object);
transaction.commit();
long id = object.getId();
entityManager.close();

我一直在想我需要一些方法来将这个引用传递给回调函数,但没有其他类似帖子似乎建议该路由。

这是我想要做的JSFiddle。功能的要点是我试图根据tabindex自动前进到下一个输入。

http://jsfiddle.net/helfon/fdu8xw0h/2/

由于

3 个答案:

答案 0 :(得分:0)

根据日志,jQuery fn中的Public Class Test_Request Property item1 As String Get Return m_item1 End Get Set(value As String) m_item1 = value End Set End Property Private m_item1 As String Property item2 As String Get Return m_item2 End Get Set(value As String) m_item2 = value End Set End Property Private m_item2 As String End Class 关键字似乎指向了窗口对象,我已按照以下方式绑定了这些函数,并在this中传递了this {1}},并让它工作,以便apply指向输入元素:

this

http://jsfiddle.net/fdu8xw0h/9/

你必须迭代元素数组,因为你的选择器返回一个输入数组,所以你必须单独处理它们,否则你的事件只会发生一次,我已经测试了它,它来自第一个输入到第二个然后它停止工作。通过我在这里粘贴的方法,它将从输入到输入。

答案 1 :(得分:0)

从您的代码中看起来您希望将发生按键的元素this传递给回调。

要实现这一点,您需要将正确的上下文传递给timeout处理程序,我们可以使用.bind(),如下所示。

另外,为了使计时器正常工作,还可以进行其他一些修正。

$.fn.onTypeFinished = function(func) {
  $(this).bind("keypress", onKeyPress)

  function onKeyPress() {
    var onTypeFinished = $(this).data('onTypeFinished');
    if (!onTypeFinished) {
      onTypeFinished = {};
      $(this).data('onTypeFinished', onTypeFinished);
    }

    clearTimeout(onTypeFinished.keytimer);
    onTypeFinished.keytimer = setTimeout(onTimeOut.bind(this), 500);
  }

  function onTimeOut() {
    func.apply(this);
  }
  return this;
};

$(".user-input").onTypeFinished(function() {
  //$('input[tabindex=3]').focus();
  var ntabindex = parseFloat(this.getAttribute('tabindex'));
  ntabindex++;
  $('input[tabindex=' + ntabindex + ']').focus();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input id="1" tabindex=1 class="user-input">
<input id="2" tabindex=2 class="user-input">
<input id="3" tabindex=3 class="user-input">
<input id="4" tabindex=4 class="user-input">

答案 2 :(得分:-1)

每当您更改范围时,您应该了解this会发生变化。始终var $this = $(this)将其锁定。

 $.fn.onTypeFinished = function (func) {
      var $this = $(this);
      $this.bind("keypress", onKeyPress);
      function onKeyPress() {
            setTimeout(onTimeOut, 500);
      }

      function onTimeOut() {
            func($this); //I would personally send this, like how you do $.each(function(count, element){})
      }
      return this;
  };

  $(".user-input").onTypeFinished(function (t) {
      var ntabindex = parseInt($(t).attr('tabindex')) + 1; //You should parse int here
      $('input[tabindex=' + ntabindex + ']').focus();
});

当然,您可以将上述内容简化为:

 $.fn.onTypeFinished = function (func) {
      var $this = $(this);
      $this.bind("keypress", onKeyPress);
      function onKeyPress() {
          setTimeout(function(){
              func($this);
          }, 500);
      }
      return this;
};

$(".user-input").onTypeFinished(function (t) {
      $('input[tabindex=' + String(parseInt($(t).attr('tabindex')) + 1) + ']').focus();
});

jsfiddle:http://jsfiddle.net/vimxts/fdu8xw0h/6/