2011-07-15 20 views
0

我看到,如果我可以做一些面向對象的JavaScript,我有以下代碼。我可以在構造函數中放入jQuery處理程序嗎?

當我去我的jQuery的事件處理程序移動到我搞糊塗的構造,因爲現在我有兩個變量...

我是不是正確處理這個還是有辦法使它工作嗎?

function Dropdown(ddlname) { 
    this.Value = 0; 
    this.Selected = false; 
    this.DDL = ddlname; 
    this.Limited = false; 
    this.SelectLast = function() { 
     $(this.DDL + ' option:last').attr('selected', 'selected'); 
    } 
    $(ddlname).change(function() { 
     var v = $(this).val(); // <== ? 
     if (typeof v == 'number') { 
      this.Value = v; // <== ? 
      this.Selected = true; // <== ? 
     } 
    }); 
    return true; 
}; 
+0

使用當前代碼,您最終會將相同的處理函數綁定到Val.DDL多次... Val.DDL中的內容是什麼? – Chandu

+0

將其更改爲'ddlname',即js類「包裝」(或者我正在嘗試)的下拉列表的ID。 –

回答

3

您需要從構造函數的上下文中將「this」賦值給局部變量,以便能夠從jquery事件處理函數中引用它。

function Dropdown(ddlname) { 
    this.Value = 0; 
    this.Selected = false; 
    this.DDL = ddlname; 
    this.Limited = false; 
    var hold = this; 
    this.SelectLast = function() { 
     $(hold.DDL + ' option:last').attr('selected', 'selected'); 
    } 
    $(ddlname).change(function() { 
     var v = $(this).val(); // <== ? 
     if (typeof v == 'number') { 
      hold.Value = v; // <== ? 
      hold.Selected = true; // <== ? 
     } 
    }); 
    return true; 
}; 
+0

爲此目的,將變量命名爲「self」或「that」是相當標準的做法 - 我更喜歡「self」以更好地反映使用情況。 「持有」意味着什麼並不明顯。不管你怎樣稱呼它,我認爲把聲明放在函數中是比較好的,然後一致地使用它來代替「this」,而不是在兩者之間進行混合,在傳遞給jQuery的函數中保存「this」其他)代碼,將「this」設置爲調用這些函數時的具體內容。 – nnnnnn

+0

因爲某些原因從未真正喜歡「那個」。 「我自己」的作品我想 – jdc0589

+0

是的,我不喜歡「那個」,或者是因爲對我來說,它聽起來像是指的是一些其他的對象,「*那個*那邊那個」,雖然它被廣泛地使用,意識到這一點。但我會堅持「自我」。 – nnnnnn

0

是的,你可以,但你需要在文檔就緒函數中調用該類。我很確定這是不好的做法。

您應該考慮將$傳遞給構造函數或創建jQuery擴展。

2

一個招,我從DataJS隊的馬塞洛·魯伊斯從中學到微軟如下:

如果
function Dropdown(ddlname) 
{  
    var that = this; 
    //rest of your code. now there is no confusion of this since you have that :) 
}; 

不知道這會幫助你。但只是我學到的一招。

+0

我更喜歡「自我」而不是「那個」,以便變量名反映它所指的意思:「那」意味着其他一些東西。 (儘管我知道在這種情況下使用「那個」是相當普遍的,可能是因爲衆所周知的短語「這個和那個」)。 – nnnnnn

相關問題