【问题标题】:Use a form with option elements to generate custom iframes使用带有选项元素的表单生成自定义 iframe
【发布时间】:2020-07-19 08:21:51
【问题描述】:

1

我正在为一个学校项目制作一个网站。

这个想法是一个网站,它允许您过滤来自新西兰板球商店的不同结果,然后使用 iframe 将它们全部放在一个地方,例如。如果一个过滤器按最低价格排序,则 iframe 将具有 URL“www.cricketwebiste.com/sortby=lowest/”

到目前为止我已经制作了一个表格:

<br>
<select id="brand">
  <option value="brand">Brand</option>
  <option value="graynicolls">Gray-Nicolls</option>
  <option value="kookaburra">Kookaburra</option>
  <option value="m&h">Millichamp and Hall</option>
  <option value="newbalance">New Balance</option>
</select>
<br><br>
<input type="button" onclick="getOption()" value="Submit">
我的问题是:我将如何使用提交表单中的数据来生成这些 iframe,以便它可以转到具有不同网站的多个 iframe 的页面。都有那个过滤器吗?例如。 cricketwebsite.com/kookaburra

【问题讨论】:

    标签: javascript php html web


    【解决方案1】:

    您可以通过多种方式做到这一点。在所有这些中,您都必须在表单元素上或表单元素中收听事件。

    第一个示例监听 &lt;select&gt; 元素上的 change 事件。当表单元素的值发生更改并触发事件处理程序侦听该事件时,会发生更改事件。本例中的事件处理程序是一个名为 selectBrand 的函数。

    selectBrand 函数获取&lt;select&gt; 元素的当前值,即所选&lt;option&gt; 元素上value 属性的值。然后,它将值与需要在它之前的 URL 连接起来,并设置 &lt;iframe&gt; 元素的 src 属性,该属性会更改 iframe 的 URL。

    现在您的 iframe 内容已更改。

    const select = document.getElementById('brand');
    const iframe = document.getElementById('iframe');
    const url = 'www.cricketwebiste.com/';
    
    function selectBrand(event) {
      const { value } = event.target;
      const src = url + value;
      console.log(src); // This show the result.
      iframe.src = src;
    }
    
    select.addEventListener('change', selectBrand);
    <select id="brand">
      <option value="brand">Brand</option>
      <option value="graynicolls">Gray-Nicolls</option>
      <option value="kookaburra">Kookaburra</option>
      <option value="m&h">Millichamp and Hall</option>
      <option value="newbalance">New Balance</option>
    </select>
    
    <iframe id="iframe" src="brand"></iframe>

    否则,您可以在 &lt;form&gt; 元素上侦听 submit 事件,该元素包装了您的输入和您需要的其他元素。每当单击表单中的 submit 按钮时,都会发生提交事件。此按钮必须是 &lt;input type="submit"&gt;&lt;button type="submit"&gt;&lt;/button&gt; 元素才能计数。

    &lt;form&gt; 元素的常规行为是通过 HTTP 请求将表单中的所有数据发送到指定端点。但是我们将使用event.preventDefault() 取消该行为,正如其名称所暗示的那样,它会阻止提交的默认行为。

    相反,您需要从所需的表单中提取值。您可以使用 FormData 构造函数来做到这一点。这将创建一个可迭代对象,其中包含表单中元素的 name-value 对。使用FormData.get(),您可以获得表单元素的特定值,在本例中为'brands' 字段,即您的&lt;select&gt; 元素。

    然后它执行与上面示例相同的操作。

    const form = document.forms['brand-form'];
    const iframe = document.getElementById('iframe');
    const url = 'www.cricketwebiste.com/';
    
    function selectBrand(event) {
      event.preventDefault();
      const { target } = event;
      const formData = new FormData(target);
      const value = formData.get('brand');
      const src = url + value;
      console.log(src); // This show the result.
      iframe.src = src;
    }
    
    form.addEventListener('submit', selectBrand);
    <form name="brand-form">
      <select id="brand" name="brand">
        <option value="brand">Brand</option>
        <option value="graynicolls">Gray-Nicolls</option>
        <option value="kookaburra">Kookaburra</option>
        <option value="m&h">Millichamp and Hall</option>
        <option value="newbalance">New Balance</option>
      </select>
      <input type="submit" value="submit">
    </form>
    
    <iframe id="iframe" src="brand"></iframe>

    我希望这足够清楚,并能帮助您在项目中走得更远。如果您有任何问题或 cmets,请随时在下方留言。

    【讨论】:

    • 你好,@Emiel Zuurbier。首先,感谢您的回复,我真的很感激。其次,我遇到了一个问题。我想我已经完成了你所展示的一切,但我的 iframe 只会显示“它可能已被移动或删除”一切都在同一个文件中,我没有更改任何名称。由于字符限制,我无法粘贴所有代码,但这是调试的主要结果:axError: Unexpected token '
    • 这是我的荣幸。您可以制作 CodePen、JSFiddle 或其他在线编码工具来显示您的代码正在运行。听起来像一个字符在它不应该在的文件中。分享您的上述选项之一的链接,其中有错误,我会看看。
    • codepen.io/lukefisher7000/pen/dyGwdxr我把所有的代码都放在了HTML部分;不过,这似乎没问题。此外,CodePen 无法处理我的 XFrame 绕过,但它在 Visual Studio 代码中工作,所以这不是问题。再次感谢您。
    • Unexpected token '&lt;' 表示 &lt; 符号出现在 JavaScript 中不应该出现的位置。我怀疑您已将 HTML(因为所有标签都以 &lt; 开头)复制到导致错误的 JavaScript 中。 HTML 从上到下工作。将您的脚本放在 HTML 的底部,尤其是当它们从 DOM 中选择元素时。否则 JS 将尝试选择(尚未)存在的元素并且事情开始中断。
    • 一个解决方案带来另一个问题!我将脚本向下移动到底部,现在当我选择一个选项时,它说网站拒绝连接。这显然是我正在使用的 XFrame Bypass 模块的问题,但我尝试单独使用它,它仍然有效。 &lt;head&gt; &lt;script type="module" src="https://unpkg.com/x-frame-bypass"&gt;&lt;/script&gt; &lt;iframe is="x-frame-bypass" src="https://playerssports.co.nz/cricket/" style="width: 500;" height="500"&gt;&lt;/iframe&gt; &lt;/head&gt; 该代码有效。已更新 CodePen。干杯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 2013-06-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多