2017-07-27 55 views
1

我在EcmaScript 6類中使用JQuery,並且我有一個事件函數,它激發了類的實例化,事件包含需要與類交互的不同JQuery事件,所以我這樣做。爲了實現這一點,除了一個由於某種原因將屬於jquery元素「this」的事件與通過.bind(that)方法傳遞的「that」相混淆的事件之外,所有工作都可以正常工作,這裏是我的代碼此事件):綁定到jQuery的功能問題

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)); 

普萊斯幫助,我不明白是怎麼回事,這裏預期,即使他們之間沒有大的區別一個不工作;(

+3

只需使用'that'父範圍,並留下jQuery來分配自己的'this'。 – alex

+0

看不出'第二個'爲'$(this)'可能如何工作? – charlietfl

+0

如果你不想'this'引用類實例但是元素,爲什麼要使用'bind'呢? ! – Bergi

回答

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>

+0

謝謝你------ –