HTML:在表单提交上隐藏输入无线电

时间:2011-12-11 21:37:04

标签: javascript jquery html forms

我有一个HTML表单,有两种可能的类型(“id”或“profile”)

<form action="process.php">
<input type="radio" name="type" value="id">
<input type="radio" name="type" value="profile">
<input type="text" name="value" value="input">
</form>

基本上,我的结果URL是

/process.php?type=id&value=input

(或类型=个人资料,具体取决于用户选择的内容)

我想要的是我的网址看起来像

/process.php?id=input

/process.php?profile=input 

我有两个问题:

1)以下jQuery / JavaScript代码是“不良做法”吗?如果我按照以下方式进行操作,我真的不觉得我做得正确(即使它有效):

<input type="submit" onclick="formSubmit()">
<script>
function formSubmit() {

    // if the first radio (id) is selected, set value name to "id", else "profile"
    $("form input:text")[0].name = $("form input:radio")[0].checked ? "id" : "profile"; 

    // disable radio buttons (i.e. do not submit)
    $("form input:radio")[0].disabled = true;
    $("form input:radio")[1].disabled = true;
}
</script>

2)有没有办法在不使用htaccess规则或JavaScript的情况下执行此操作?

谢谢!

2 个答案:

答案 0 :(得分:1)

关于第一个问题,我会像这样编写jQuery:

// store your form into a variable for reuse in the rest of the code
var form = $('form');

// bind a function to your form's submit.  this way you
// don't have to add an onclick attribute to your html
// in an attempt to separate your pre-submit logic from
// the content on the page
form.submit(function() {
        // text holds our text input
    var text = $('input:text', form),
        // radio holds all of our radio buttons
        radio = $('input:radio', form),
        // checked holds our radio button that is currently checked
        checked = $('input:radio:checked', form);

    // checking to see if checked exists (since the user can
    // skip checking radio buttons)
    if (checked) {
        // setting the name of our text input to our checked
        // radio button's value
        text.prop('name', checked.val());
    }

    // disabling our radio buttons (not sure why because the form
    // is about to submit which will take us to another page)
    radio.prop('disabled', true);
});

至于第二个问题,您可以随时将此逻辑移至服务器端。这取决于您是希望客户端还是服务器完成预处理逻辑。无论哪种方式,您都应该在服务器上使用逻辑来验证表单。如果您的js出错,可以发送原始表单数据。我个人将这个逻辑放在服务器上,以避免检查的开销,以确保它首先进行预处理。你还可以减少你的js使用,这将为你节省一些宝贵的带宽。

答案 1 :(得分:0)

您可以尝试这样的事情:

<input type="radio" name="type" value="id" onclick="getElementById('textValue').setAttribute('name','id');">
<input type="radio" name="type" value="profile" onclick="getElementById('textValue').setAttribute('name','profile');">

<form action="process.php">
<input type="text" id="textValue" name="value" value="input">
<input type="submit">
</form>

将无线电输入放在表单之外,使用id标识的文本输入,以便您可以使用getElementById功能(如果浏览器支持,仍需要检查)。如果您在此页面上不需要它,则可以避免加载jQuery。

结果是您所期望的结果。

但是..我会使用表单的服务器端处理。