10

我正在编写一个 jquery 插件来创建为我的应用程序设计的 ajax 调用。

在这个插件中,我的 ajax 调用看起来像这样(简化为问题需要):

    $.ajax({
        url: route,
        type: "post",
        data: inputData,
        success: function(response, textStatus, jqXHR) {
            if (outputSelector !== undefined) {

                $(outputSelector).html(response);
                // or
                $(outputSelector).val(response);

            }
        }
    });

outputSelector 是一个选择器,在插件外部定义。我不知道这个选择器是 a<div>还是 an<input>甚至是 a <select>。有没有一种聪明的方法可以知道我是否需要使用 val() 或 html() ?

4

5 回答 5

13

可能我们可以检查元素是否具有value属性:

var el = $(outputSelector);
if (el[0].value !== undefined) {
    el.val(response);
} else {
    el.html(response);
}

因此,有点像一条通用解决方案可能是:

$(outputSelector).each(function() {
    this[this.value !== undefined ? "value" : "innerHTML"] = response;
});
于 2012-10-16T16:38:37.510 回答
4

如果outputSelector是类选择器,并且元素是混合类型,则需要使用.each. div虽然混用和input同一个类不好,但是如果你在创建一个插件,你需要考虑这种情况。

$(outputSelector).each(function() {
    if ('value' in this) {
        $(this).val(response);
    } else {
        $(this).html(response);
    }
});
于 2012-10-16T16:43:12.613 回答
2

您可以使用.is(..)方法来确定使用哪种方法。

$.ajax({
    url: route,
    type: "post",
    data: inputData,
    success: function(response, textStatus, jqXHR) {
        if (outputSelector !== undefined) {
            var $output = $(outputSelector),
                method = $output.is('input,select,textarea') ? 'val' : 'html';

            $output[method](response);
        }
    }
});
于 2012-10-16T16:39:09.343 回答
1

您还可以使用.prop()方法来确定是否为给定的选择器定义了属性:

if ($(outputSelector).prop("value") !== undefined)
  $(outputSelector).val(response);
else
  $(outputSelector).html(response);

例子

或者你可以我们.hasOwnProperty()

于 2012-10-16T16:50:10.117 回答
0

在您的成功函数中,输入:

if (outputSelector !== undefined) {
    if(outputSelector.is("input"))
    {
        outputSelector.val(response);
    } 
    else if (outputSelector.is("div"))
    {
        outputSelector.html(response);
    }
}

使用 switch 语句会是更好的语法,但如果您假设只有输入将用于val(),那么其他所有内容html()只需将最后一个替换为else ifjustelse并删除条件。

于 2012-10-16T16:40:44.523 回答