我有一个选择器,我得到第一个这样的元素:
$("#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]定义'this'。
我只是想知道是否有更好的方法来做到这一点。
请注意,我不想使用$(this).val()
之类的东西来访问我的控件的值答案 0 :(得分: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'));
}