jquery - 根据表单选择更改提交的 URL

标签 jquery xhtml forms

我有一个表单,需要根据表单中的选择将其提交到三个不同的 URL 之一。

我怀疑最简单的解决方案是使用 jQuery 在进行选择时在其余表单参数之前插入适当的路径,但不确定代码是什么。非常感谢任何指点!

<form id="myForm" action='/booking/default-path' accept-charset='utf-8' method='get'>
  <select name="paramA" id="paramA">
    <option id="optionA" value="A" selected="selected">Option A</option>
    <option id="optionB" value="B">Option B</option>
  </select>
  <select name="currency" id="currency">
    <option id="GBP" value="GBP" selected="selected">British Pounds</option>
    <option id="EUR" value="EUR">Euros</option>
    <option id="USD" value="USD">US Dollars</option>
  </select>
<input type="submit" value="submit" id="submit" name="submit" />
</form>

三个不同的 URL 位置:

../booking/default-path-gbp?...[此处的参数]...

../booking/default-path-eur?...[此处的参数]...

../booking/default-path-usd?...[此处的参数]...

我知道以通常的方式合并参数并仅使用一个提交 URL 根会容易得多,但不幸的是,我正在向不受我控制的电子商务系统提交,并且必须找到解决方案对此。

我认为应该很容易,但不确定从哪里开始,jQuery 在其他地方使用过,所以更愿意在任何解决方案中使用这个框架。

编辑:下面的解决方案看起来非常接近!然而,我发现另一个正在运行的框架存在冲突(Mootools),需要通过 .ready() 加载才能正确触发 jQuery。

我必须:

这看起来很接近,但我无法让它点火。我遇到了问题,因为正在使用另一个框架(MooTools),所以我通过准备使用触发代码:

<script type="text/javascript">
//<!--
jQuery(document).ready(function($) {
  $("p.hello").text("The DOM is now loaded and can be manipulated.");//Test line!
  $('#myForm').attr( 'action', function() {
  '/booking/default-path' + $('#currency').val();
});
//-->
</script>

但是没有骰子。测试线可以在没有其余代码的情况下工作,因此 jQuery 可以工作,但它不能与其余代码一起工作。很近!我哪里出错了?

编辑2:

这是未捕获的代码:

<script type="text/javascript">
//<!--
jQuery(document).ready(function($) {//Need to use this to avoid MooTools conflict
  $("p.hello").text("The DOM is now loaded and can be manipulated."); //Test line!
  $('#currency').change(function() {
    $("#myForm").attr("action", "/booking/default-path" + $("#currency").val());
  });
});
//-->
</script>

编辑3:上面的代码工作正常......除了表单操作之外的所有内容 - 这很奇怪,我什至可以更改表单的其他属性 - 例如,将选择数据作为字符串传递给标题属性,但是当它设置为“操作”,但不起作用。令人抓狂!有谁知道为什么表单的操作属性会特别失败?

感谢迄今为止的所有帮助!

最终编辑!

解决了! ID 为“action”的输入存在冲突,导致 DOm 失败。已解决且以上代码有效,谢谢大家!

最佳答案

您可以更改选择更改时的表单操作。 类似这样,除了使用 if 来确定选择哪种货币并相应地更改 url。

编辑:实际上,另一个答案是不需要 if 的好方法。

$('#currency').change(function() {
  $('#myForm').attr('action', $('#currency').val()));
});

第二次编辑:

.attr() 方法的第二个参数必须是字符串,而不是函数。您的 jQuery 应该如下所示:

$(function() {  // this is a shortcut to using $(document).ready()

   $("p.hello").text("The DOM is now loaded and can be manipulated."); //Test line!
   $("#myForm").attr("action", "/booking/default-path" + $("#currency").val());

});

此外,您还希望将测试行及其下方的测试行放在 #currency 选择的更改事件内,以便在选择更改时更改 URL。按照您现在的方式,它只会更改初始页面加载时的 URL,而不会再更改。

关于jquery - 根据表单选择更改提交的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2783229/

相关文章:

javascript - 悬停功能无法按需工作

javascript - 如何防止 Knockout 覆盖我的初始复选框值?

jquery - 循环遍历表单输入

php - 从 jquery $GET 请求的页面加载特定的 div?

jquery - 使用 jquery 验证

javascript - jScrollPane 未显示在 div #container 中

html - 如何垂直对齐按钮

css - 使用960gs的基本问题

css - 为什么基于表格的网站对屏幕阅读器用户不利?

javascript - jQuery 获取此表单输入