绑定到jquery函数问题

时间:2017-07-27 14:56:24

标签: javascript jquery webpack ecmascript-6 es6-class

我在EcmaScript 6类中使用JQuery,并且我有一个事件函数,它触发类的实例化,并且事件包含需要与类交互的不同JQuery事件,所以我做.bind()实现这一点,一切正常,除了一个由于某种原因覆盖了属于jquery元素的事件"这个"用"那"我用.bind(那个)方法传递的,这是我的代码(一切都适用于此事件):

var that = this;
$(document).on('click', '[select-file]' , function(event) {
event.preventDefault();


console.log(this);

}.bind(that));

所以控制台日志给了我父类而不是jquery元素 这可以按预期工作:

            $(document).on('click', '[open-file-dialoge]', function(event) {
                event.preventDefault();
                  $('[file-dialoge]').modal('show');
                  if ($(this).attr('mitiupload') == 'false') {
                    // check if multiple upload is disabled
                    that.multiUpload = false;
                    $(this).removeAttr('multiple');
                  }
                  that.insertFiles();
            }.bind(that));

请求帮助,我无法理解这里发生了什么,即使它们之间没有太大的区别,也没有按预期工作;(

1 个答案:

答案 0 :(得分:0)

Function#bind()更改了函数中this的上下文。如果您想要当前元素,可以使用event.currentTarget

var that = {};
$(document).on('click', 'button', function(event) {
  event.preventDefault();
  var el = event.currentTarget;

  console.log('this=', this);
  console.log('el=', el)

}.bind(that));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="test">Click me</button>