【问题标题】:Changing form action based on text input根据文本输入更改表单操作
【发布时间】:2012-02-09 18:07:22
【问题描述】:

所以我有一个简单的搜索表单和提交按钮。我想要做的是验证输入以确定搜索查询中是否包含“=”,如果是,那么我希望它将输入字符串(que)发送到 vert.php。如果没有,那么我希望它发送到 search.php。

<script type="text/javascript" language="JavaScript">
function chgact()
   {
if(document.myform.que.indexOf(=) == true) {
   document.myform.action = '/vert.php';
   }
return true;
}
</script>
    <h1>Keyword search</h1>
    <form name="myform" method="post" action="/search.php"  onSubmit="return chgact()">
      Keywords: <br/>
      <input type="text" name="que" id="que" / >
      <p/>
      Items to display: <br/>
      <select name="i">
        <option value="10">10</option>
        <option value="25">25</option>
        <option value="50">50</option>
      </select>
      <p/>
      <input type="submit" name="submit" value="Search"/>
    </form>

非常感谢任何帮助! :)

【问题讨论】:

    标签: forms text input action


    【解决方案1】:

    将第 4 行更改为 if (document.myform.que.value.indexOf('=') != -1) {

    您需要获取 que 的 ,需要引用等号(您正在搜索 字符 '=')和 @987654322 @ 函数如果没有找到则返回 -1 或第一次出现的位置,它是一个整数。它不返回布尔值。

    这是更新后的代码:

    <script type="text/javascript" language="JavaScript">
    function chgact()
       {
    if(document.myform.que.value.indexOf('=') != -1) {
       document.myform.action = '/vert.php';
       }
    return true;
    }
    </script>
        <h1>Keyword search</h1>
        <form name="myform" method="post" action="/search.php"  onSubmit="return chgact()">
          Keywords: <br/>
          <input type="text" name="que" id="que" / >
          <p/>
          Items to display: <br/>
          <select name="i">
            <option value="10">10</option>
            <option value="25">25</option>
            <option value="50">50</option>
          </select>
          <p/>
          <input type="submit" name="submit" value="Search"/>
        </form>
    

    【讨论】:

    • 好的,所以它返回 -1 或 1 或 0 中的值,并将其作为 action 的值,这就是你的意思?我更新了代码,但它没有将 vert 放置为我认为 myform.action = 行所做的操作?
    • indexOf 如果在单击提交按钮时在 que 文本框中未找到等号,则返回 -1。因此,按照上面的逻辑,如果indexOf('=') 返回的不是-1(意味着在文本框中找到了'=' 字符),那么它会将操作切换到'/vert.php'。复制并粘贴上面的整个代码并尝试一下。它应该可以工作。
    • 太棒了,它确实有效,感谢您帮助我解决该问题的逻辑。你提到我必须将值传递给“que”,我知道这是真的,但它似乎必须用 Javascript 完成,对吗?我在哪里可以了解它是如何编码的?
    • document.myform.que 获取文本输入 objectdocument.myform.que.value 为您获取输入到文本输入对象中的 text。之前,您的代码不会检查输入到文本框中的 text 是否包含等号,而是检查文本框 object 本身是否包含等号符号,这没有意义。
    • 我明白答案是一个愚蠢的错误。我想知道如何将该文本字符串放入该特定脚本将操作更改为类似 的 url
    【解决方案2】:

    我建议您使用 PHP 执行此操作。如果您的网站访问者关闭了 JavaScript,他们将无法从您的逻辑中受益。我建议您查看 strpbrk() 函数来检测“=”字符。

    【讨论】:

    • 这样的脚本到底是什么样的?我从未尝试过使用 PHP 进行表单验证。
    • 我认为担心浏览器是否支持 Javascript 已成为过去。我认为必须从服务器下载额外的页面以确定重定向的位置会更有害。
    • 我们仍然有大约 11% 的网站访问者在 23 个网站上关闭了 js。消费者启用 js 的比例较高,而大中型公司的比例较低。我不知道您在这里的过滤器,但我们注意到 11%。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多