2016-12-02 20 views
0

我想工作,ubonstrustive DOM已準備就緒,看起來這樣的事情,不顯眼的DOM準備的javascript失去此背景下,

var app = { 

    common : { 

     init: function() { 

      //Initialisate the request object 
      app.request.init(); 
     } 

    }, 

    request: { 

     users : "helloworld", 

     init: function() { 
      alert("...request started..."); 
      $('form').on('change', '#workbase', this.workBaseChange); 
     }, 

     workBaseChange: function(e) { 
      var that = this; 
      console.log(this); 
     } 

    }, 

    validation : {} 

} 

UTIL = { 

    fire : function(func, funcname, args) { 

     var namespace = app; 
     funcname = (funcname === undefined) ? 'init' : funcname; 
     if(func !== '' && namespace[func] && typeof namespace[func][funcname] == 'function') { 
      namespace[func][funcname](args); 
     } 

    }, 

    loadEvents: function() { 
     UTIL.fire('common'); 
     $.each(document.body.className.split(/\s+/), function(i, classnm){ 
      UTIL.fire(classnm); 
     }); 
    } 
}; 

$(document).ready(UTIL.loadEvents); 

request.workBaseChange火災時,選擇菜單改變,但是如果日誌this在那個函數中,它返回的變化select不是請求對象,因爲我期望,我做錯了什麼?如何獲取請求的上下文{}?

+0

看到這個:http://stackoverflow.com/questions/13441307/how-does-the-this-keyword-in-javascript-act-within-an-對象的文字/ 13441628#13441628 – slebetman

回答

0

嘗試

$('form').on('change', '#workbase', this.workBaseChange.bind(this)); 

您可以在這裏找到更多的信息:如果使用IE瀏覽器所支持的只有在IE9或更高版本https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind

注意。但是,上面的鏈接上有一個polyfill。

this.workBaseChange是提供給jquery事件的回調函數。在回調中,'this'值被設置爲觸發事件的元素,即select。 bind函數返回一個新函數,其值爲'this'作用於該函數,然後將'this'屬性設置爲您提供的值。

而且在這裏看到了jQuery文檔(上下文,call和apply):

http://api.jquery.com/Types/#Function

在JavaScript中,變量 「這個」 永遠指當前 上下文。默認情況下,「this」是指窗口對象。在 函數內,此上下文可能會發生更改,具體取決於調用函數的方式如 。

在jQuery中的所有事件處理程序都使用處理元素作爲 上下文進行調用。

看到這個在這裏工作:https://jsfiddle.net/mzxrhz8t/