0

我真的需要这个,因为我无法手动输入管理面板的大量选项。因此,我需要一种快速的方法来获取每个输入/选择并根据需要添加值。

这是一个选项字段的 looong 示例:

$("select[name=big_proceed]").val("true");
$("select[name=proceed_action]").val("");
$("input[name=choice_premium]").val("Premium <span>Code</span>");
$("input[name=big_proceed_pts]").val("");

$("#settings_proceed input, #settings_proceed select").each(function () {
    databaseData($(this));
});

我认为这样的事情可能会奏效,但显然我错了。这是示例:

$("#settings_proceed :input").each(function () {
    $(this)
        .eq(0).val("true")
        .eq(1).val("")
        .eq(2).val("Premium <span>Code</span>")
        .eq(3).val("");

    databaseData($(this));
});

对我有什么建议吗?

4

1 回答 1

1

jQuery 文档

.eq(index):将匹配元素集减少到指定索引处的元素。

因此,您的第二个示例无法按预期工作,因为$(this)仅匹配一个元素(这是 后面的意图.each())。您可以像这样重写代码:

var values = ["true", "", "Premium <span>Code</span>", ""];
$("#settings_proceed :input").each(function(i){
    $(this).val(values[i]);
    databaseData($(this));
});

但是,这种方法使代码难以阅读且容易出错,因为它假定 HTML 元素的顺序是固定的(如果您更改了输入字段的顺序但忘记相应地调整 JS 怎么办?)。因此,您确实应该“手动”将 ID 添加到您的输入元素中,并通过它们的 ID 而不是它们的索引来选择它们。

正如@David Thomas 指出的那样,一些示例 HTML 在这里会很有帮助,但是在不知道您尝试做什么的任何进一步细节的情况下,我建议以下内容:

var values = {
    big_proceed: "true",
    proceed_action: "",
    choice_premium: "Premium <span>Code</span>",
    big_proceed_pts: ""
};

$.each(values, function(key, value){
    $("#settings_proceed").find("[name='"+key+"']").val(value);
    databaseData($(this));
});

这样你就可以巧妙地定义一个对象中的所有值,让 jQuery 安全地完成剩下的工作。

于 2013-10-06T12:46:20.440 回答