-2

我有一个选择器,我可以在其中获得这样的第一个元素:

$("#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() 之类的东西访问我的控件的值

4

1 回答 1

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'));
}
于 2012-08-10T20:43:04.610 回答