Более легкое изменение нескольких значений с помощью jQuery

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));
});

Любые предложения для меня?

  • 0
    нет простого способа сделать то, что вы что .. потому что нет шаблона .. каждое поле просто имеет различное значение ..
  • 0
    Ну, должен быть способ нацеливаться на каждый вход, выбирать и изменять его значение, печатая его вручную ... Я просто не знаю, как правильно нацелить их. Нет идей, почему .eq () не будет работать.
Показать ещё 3 комментария
Теги:

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 соответственно?). Поэтому вам действительно нужно "вручную" добавлять идентификаторы к вашим элементам ввода и выбирать их по их идентификатору, а не по индексу.

Как заметил @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 безопасно делать все остальное.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню