Передайте скрытое значение поля, на основе которого нажата кнопка JavaScript.

У меня есть форма с двумя кнопками, каждая из которых имеет onclick = this.form.submit(). У меня есть скрытое поле в форме, и я хотел бы, чтобы значение поля отличалось в зависимости от того, какая кнопка нажата. Какой был бы лучший способ сделать это?

Кроме того, прежде чем кто-нибудь скажет ответы, jQuery в этом случае не является вариантом.

Ответ 1

Использовать прототип: -)

Но со всей серьезностью:

  • Добавить id в скрытое поле
  • Перед отправкой формы в каждый обработчик:

    document.getElementById("hiddenId").value = "mySpecialValue";

    //or (depending on which onclick handler you are in)

    document.getElementById("hiddenId").value = "myOtherSpecialValue";

  • Отправьте форму так же, как и сейчас.

Рекомендуемый пример:

<input id="buttonA" type="button" value="do something" onclick="buttonA_clickHandler(event);"/>

...

function buttonA_clickHandler(event) {
    document.getElementById('hiddenId').value = whatever;
    document.getElementById('theForm').submit();
}

повторить для другой кнопки.

Ответ 2

Предполагая, что у вас есть скрытая настройка поля примерно так:

<input type="hidden" name="clicked_button" id="clicked_button" value=""/>

Вы можете просто установить его значение в общем обработчике onclick для ваших кнопок:

function buttonClick(theButton){
    document.getElementById('clicked_button').value = theButton.name;
    return true;
}

И тогда ваши кнопки отправки будут:

<input type="submit" name="save" value="Save" onclick="return buttonClick(this)"/>
<input type="submit" name="delete" value="Delete" onclick="return buttonClick(this)"/>

Ответ 3

  • Простите меня, если ответ на этот вопрос кажется очевидным, но зачем использовать скрытые поле вообще? <input type="submit" value="..." /> уже работает; браузеры отправят value кнопку отправки, которая была нажата, наряду с остальной частью формы данные.

  • <button type="submit" name="..." value="...">...</button> элемент отлично работает в Chrome/Safari/Firefox, но в IE7 (как отмечает Lèse majesté в его комментарий выше); если вы не заботиться об IE, это было бы перейти.

  • Вы также можете использовать <input type="image" /> элемент, просто помните, что браузер отправляет это как два поля: name.x и name.y. Также, вы не можете установить его значение, но это не должно быть проблема, если вас интересует только наличие поля.

Ответ 4

Вы можете передать значение, в которое вы хотите установить скрытый ввод для создаваемой функции:

function handleClick(val){
    document.getElementById('HiddenInputID').value = val;
    return true;
}

а затем закодируйте кнопки с помощью onclick, чтобы передать любое значение, которое вы хотите:

<input type="submit" name="Name1" value="Value 1" onclick="return handleClick('Value 1')"/>
<input type="submit" name="Name2" value="Value 2" onclick="return handleClick('Value 2')"/>