【问题标题】:advanced search without javascript没有 javascript 的高级搜索
【发布时间】:2020-10-14 21:37:53
【问题描述】:

我正在使用 a-tags 构建高级搜索,以过滤首字母 abcdefghijklmnopqrstuvwxyz0-9 以及输入字段、其他条件的选项字段、单选按钮和提交按钮。当我单击一个字母过滤器时,它会将其作为 $_GET 变量发送。但是当我随后使用输入字段时,它当然会忘记它。在将其与表单中的所有其他变量一起发送之前,如何使用提交按钮获取此变量?我必须为此使用 JS 和 AJAX 吗?你推荐吗?

编辑

所以让我重新表述一下。 我有不同的变量要发送到服务器,来自输入字段、单选按钮、选项字段,但我还想要一个字母表中每个字母的链接(因此它会列出所有以该字母开头的条目)。 当我单击提交按钮时,它会从输入字段发送所有变量,但不会从 a-tags 发送(因为我猜它们不被识别为表单字段)。当我单击 a-tags(一个字母)时,它只会将那个非常变量发送到服务器,这也很好。我的问题是,如何让提交按钮发送所有内容?

 

url.'?letter='.$abc.'">'.$abc.' '; } ?>

aufsteigend ```

【问题讨论】:

    标签: php html get


    【解决方案1】:

    我假设您希望在输入“a”时进行类似 Google 的动态搜索,它会为您提供“飞机、苹果、动脉”等选项的下拉列表。 如果是这样,那么是的,你确实需要 JS + AJAX。 您可以让 AJAX 在输入字段中动态显示可用选项,而不是单击字母过滤器。 鉴于您对问题的模糊描述以及您的 UI 图像的缺失,只能这么说。

    【讨论】:

      【解决方案2】:

      我并没有真正从解释中得到问题和整个情况,但听起来如下: 当用户单击特定按钮时,您希望根据输入字段 search-query 的值呈现提示:letter-filter。如果这是正确的,那么无论如何您都必须向后端发送一个获取请求,以便它会返回包含所有提示的页面。

      FE:

      <html>
        <body>
          <form action="app.com/myurl" method="GET" >
            <input id="letter" value="a" name="letter" />
            <input id="letter2" value="b" name="other_param" />
            <input id="letter3" value="c" name="another_param" />
            <!-- All three  inputs will be visible in the $_GET variable when you send the request -->
            <!-- Other input fields here: <input type="whatever" id="whatever".../> -->
            <button type="submit">letter filter</button>
          </form>
        </body>
      </html>

      您甚至可以在 borwser 的网络选项卡中跟踪请求,如果参数未附加为查询参数,如 app.com/myurl?letter=a&amp;other_param=b&amp;another_param=c,如果您没有看到查询参数但看到 url 本身,那么我建议您忘记设置表单的方法。

      但我仍然不确定,你能否改写你的问题,因为它没有清楚地解释这个案例,抱歉你的英语有点混乱。

      改写后编辑:

      我现在明白你的目标,你是对的,提交按钮只发送表单域,&lt;a&gt; 标签不是表单域。 如果您想将所有表单字段附加到 &lt;a&gt; 标记单击,那么您几乎没有选择。

      1. 在渲染时手动附加服务器端的所有参数:

      你有

      foreach ($alphabet as $abc){
        if ($abc == $letter) {
            $class = 'current';
        }
        
        else $class = '';
        echo '<a class="'.$class.'" href="'.$page->url.'?letter='.$abc.'">'.$abc.'</a> ';
      }

      您还需要另外添加表单字段,我假设在第一次单击时没有呈现任何标签(屏幕上没有&lt;a&gt; 标签),然后您只需发送表单数据,在那一刻您会抓住来自 $_GET 的表单数据并附加到锚点

      foreach ($alphabet as $abc){
        if ($abc == $letter) {
            $class = 'current';
        }
        
        else $class = '';
        echo '<a class="'.$class.'" href="'.$page->url.'?letter='.$abc.'otherParamName='.$_GET['otherParam']].'">'.$abc.'</a> ';
      }
      1. 您可以使用js,收集表单数据,我猜您使用jQuery,并在点击锚点时附加到href

      jQuery('a.someClassIdentifier').click(fuction(e) {
        // Please read documentation of jquery how to handle click events, I dont remember it out of my head right now.
      });
      &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"&gt;&lt;/script&gt;

      但作为最终答案,我想说重新考虑您的方法。如果您已经有一个表单,并且它将 GET 请求发送到端点并返回标签可见的同一页面,那么您可以使用表单字段而不是锚标签,这已经为您处理数据发送。但是,如果您有不同的标签接收端点,那么最好发送 ajax 请求以仅接收 json 数据并在不刷新页面的情况下呈现它们。

      希望对你有帮助。

      【讨论】:

      • 当我将“”字段用于字母过滤器或“
      猜你喜欢
      • 1970-01-01
      • 2018-04-23
      • 2017-10-02
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 2018-07-13
      • 2015-04-17
      • 2012-04-09
      相关资源
      最近更新 更多