代码之家  ›  专栏  ›  技术社区  ›  Ben

如何只传递某些表单值

  •  0
  • Ben  · 技术社区  · 17 年前

    我有一个有很多选择的表格。由于各种原因,我只想将用户选择的表单传递给表单。换句话说,每个选择都是这样的:

    <SELECT name=field001>
      <option value=-1>Please pick a value</option>
      <option value=1>1</option>
      <option value=2>2</option>
      <option value=3>3</option>
    </SELECT>
    

    通常一次只选择一个或两个,我只想将所选的传递到表单。我猜我需要取消设置javascript中-1的输入,但我不知道如何做,也不知道是否有一种标准的方法来处理这类事情。

    4 回复  |  直到 13 年前
        1
  •  5
  •   Sergio    17 年前

    发布表单时,它将向服务器发送每个控件的值。如果您需要防止这种情况发生,我认为您最好的选择是覆盖onsubmit操作并重定向到同一页面的新实例,只在querystring上放置您想要的信息。

    请记住,这将大大增加代码的复杂性,并使其难以维护。我的意见是,你只是不会获得足够的表现,使你的努力值得一段时间,但这取决于你。

        2
  •  1
  •   shsteimer    17 年前

    这是不常见的。

    如果您真的需要它,那么您可以按照@sergio的建议进行操作,或者从dom中删除要跳过的项目,或者在提交时将它们标记为禁用(尽管我的某些浏览器使用 disabled 控制——你得检查一下)。

    这真的不常见。如果您有太多的选择,发送它们会导致问题,那么您有太多的选择。

    处理这种情况的正常方法是使用您的魔法值“-1”,知道何时忽略服务器端的某些值。

        3
  •  1
  •   user61547    17 年前

    不管数量多少,我都会检查每个元素,尤其是因为数量。你怎么能确定用户没有改变其他东西呢?你说:

    通常一次只能选择一个或两个

    就在这里,你甚至不能百分之百确定,嗯?经验告诉我,永远不要相信你所希望的“通常”会发生,因为它往往是意想不到的,抓住你!

        4
  •  1
  •   Ramuns Usovs    17 年前

    假设您只有一个表单,请将此脚本添加到您的页面:

    document.forms[0].onsubmit = function(){
        var selects = this.getElementsByTagName('select');
        for ( var i = selects.length - 1; i>=0; i-- ) {
            if ( selects.item(i).value == -1 ) {
                selects.item(i).parentNode.removeChild(selects.item(i));
            }
        }
        return true;
    }