2012-08-10 35 views
-2

選擇元素下我有一個選擇,我得到的是第一個元素:獲取與jquery

$("#MyControl")[0] 

是否有可能獲得比訪問像一個數組中的元素之外的功能的元件?

我想要做的就是將這個元素傳遞給一個帶有.call()的函數來定義上下文。

下面是一個例子:

$(document).ready(function() { 
    $(document).on("change", "#MyControl", setActivityControlsState); 
}); 

setActivityControlsState: function() { 
    var selector = "#automaticActivityCreation"; 

    if ($(selector).length > 0) { 
     if ($.isNumeric(this.value) && this.value > 0) 
      $(selector).show(); 
     else 
      $(selector).hide(); 
    } 
} 

referenceFormOnSuccess: function (data) { 
    setActivityControlsState.call($("#MyControl")[0]); 
} 

正如你可以在refreshFormOnSuccess功能看,我必須界定 '本' 與$( 「#MyControl」)[0]。

我只想知道是否有更好的方法來做到這一點。

請注意,我不想要的東西,如$來訪問我的控件的值(本).VAL()

+1

http://api.jquery.com/get/ - 兩個選項都做同樣的事情,沒有一個比另一個更好 – nbrooks 2012-08-10 20:34:16

+0

這裏有什麼問題? 'setActivityControlsState.call($(「#MyControl」)[0]);'工作正常。 – 2012-08-10 20:36:37

+0

或者你也可以使用'$(「#MyControl:eq(0)」)' – redDevil 2012-08-10 20:38:50

回答

3

我建議一個小的重新構造,其減輕這種需要:

$(document).ready(function() { 
    $(document).on("change", "#MyControl", setActivityControlsState); 
}); 

setActivityControlsState: function() { 
    // cache jquery object instead of just the selector 
    // for better memory management 
    var automaticActivityCreation = $("#automaticActivityCreation"); 

    if (automaticActivityCreation.length > 0) { 
     if ($.isNumeric(this.value) && this.value > 0) 
      automaticActivityCreation.show(); 
     else 
      automaticActivityCreation.hide(); 
    } 
} 

referenceFormOnSuccess: function (data) { 
    // fire the change event which will tap 
    // the listener you set up in .ready 
    $("#MyControl").trigger('change'); 
} 

,但如果你真的想要得到與jQuery的對象,你確實有一些選擇:

// jQuery select #MyControl and get as dom element with array 
$("#MyControl")[0] 

// jQuery select #MyControl and get as dom element with .get 
$("#MyControl").get(0) 

而是因爲你正在使用一個電子字元素有ID,你只可以使用一個ID在同一時間,你真的不需要jQuery的這個

document.getElementById('MyControl') 

referenceFormOnSuccess: function (data) { 
    setActivityControlsState.call(document.getElementById('MyControl')); 
} 
+0

'$(「#MyControl」).get()'返回將jQuery對象轉換爲普通數組。 – 2012-08-10 21:01:43

+0

啊,我的壞。編輯。 – Fresheyeball 2012-08-10 21:43:04

+0

@Fresheyeball:非常感謝。這正是我所說的:一個很好的答案。我將使用get而不是brakets來訪問第一個元素。 – Samuel 2012-08-10 21:56:45