【问题标题】:Form append just VALUES not variables to URL表单仅将 VALUES 而非变量附加到 URL
【发布时间】:2017-01-12 21:21:13
【问题描述】:

我需要发送一个仅包含附加到 URL 的值的表单,如下所示:

http://thisistheurl.com/serv#search/VALUE1/VALUE2/VALUE3/VALUE4

我可以这样发送:

http://thisistheurl.com/serv?variable1=value&variable2=value&variable3=value&variable4=value #搜索/

表格很简单。

<form id="consultatickets" name="consultatickets" role="form" method="get" class="tickets-form" action="http://thisistheurl.com/serv#search/" target="_blank">

<div class="row">
    <div class="form-group col-md-12 col-sm-12">
        <label for="ciudadorigen" class="tickets-imputs">Ciudad de Origen</label>
        <select name="ciudadorigen" class="form-control ciudadorigen tickets-imputs" for="ciudadorigen">
            <option selected disabled>1</option>
            <option value="562">2</option>
            <option value="582">3</option>
        </select>                   
    </div>
</div>

<!-- Here goes the rest of the form -->

<a type="submit" class="btn btn-warning waves-effect btn-block" href="javascript:{}" onclick="document.getElementById('consultatickets').submit();">Buscar <i class="fa fa-search" aria-hidden="true"></i></a>
</div>

我不知道如何仅从变量中提取值并附加到 URL。

【问题讨论】:

  • 从您的示例中不清楚您指的是什么变量。如果要捕获数据并将其重新映射到 URL,则需要在不使用 HTML 表单的默认功能的情况下执行此操作。到目前为止,您尝试过什么?
  • 变量是 INPUT 或 SELECT 的名称。 HTML 表单总是像这样附加: ?inputname=inputvalue&... 。我只需要这个值。

标签: php jquery forms url


【解决方案1】:

如果顺序无关紧要,您可以通过将表单的值序列化并将其附加到表单的 action 属性以构建最终 url 来实现。

<form id="consultatickets" name="consultatickets" role="form" method="get" class="tickets-form" action="http://thisistheurl.com/serv#search" target="_blank">

<div class="row">
    <div class="form-group col-md-12 col-sm-12">
        <label for="ciudadorigen" class="tickets-imputs">Ciudad de Origen</label>
        <select name="ciudadorigen" class="form-control ciudadorigen tickets-imputs" for="ciudadorigen">
            <option selected disabled>1</option>
            <option value="562">2</option>
            <option value="582">3</option>
        </select>
        <label for="campo_adicional">Campo adicional</label>
        <input id="campo_adicional" type="text" name="campo_adicional" />
    </div>
</div>
<input type="submit" value="search"/>
</form>

$("#consultatickets").on('submit',
function(e) {
  e.preventDefault();
  var values = $(this).serializeArray();
  var baseUrl = $(this).prop("action");
  $.each(values, function(i, v) {
    baseUrl += "/" + encodeURIComponent(v.value);
  });
  alert(baseUrl);
}
);

https://jsfiddle.net/kb3rvLjs/

【讨论】:

  • 是的,订单很重要。我会试试这个选项。谢谢
  • 我不知道为什么,但它不起作用。小提琴工作正常,我从那里复制但没有。我改变我正在做的方式。非常感谢。
  • 如何修改代码以及“不起作用”是什么意思?
  • 这是一个有冲突的 jquery 问题。我将“$”更改为“jQuery”并在警报中工作。警报显示正确的 URL,但我无法发送。它从不提交表单,我停留在同一页面,而是转到表单提交 URL。
  • 已解决。我添加 window.open(baseUrl, '_blank'); 然后将我发送到我想要的 URL。
【解决方案2】:

未经测试,我不确定我是否正确地回答了您的问题,但您似乎正在寻找这样的东西:

// your form submit event handler
function formSubmit() {
    var form = $('#consultatickets');
    // build your url
    var url = 'http://thisistheurl.com/serv#search/' + 
        getValues(form).join('/');

    // redirect to your new location
    location.href = url;
};

// function to get the values from the form elements
function getValues(form) {
    // get all form fields in the form
    var fields = $( "input, select", form);
    var values = [];
    // loop over the fields, add them to array
    jQuery.each( fields, function( field ) {
      values.push(encodeURI(field.val()));
    });
    return values;
}

如果您想使用 a 标签触发表单提交,只需将您的 onclick 属性更改为:onclick ="formSubmit();"。

【讨论】:

  • 我会尝试,但我认为你的方法是正确的。
  • 我不知道如何调用该函数。在表单操作中,我把 action="getValues();" 和提交 onclick="document.getElementById('consultatickets').submit();" 但没有不行。
  • @Estudio3551 不 - 你做错了。我已经更新了我的答案 - 你确定你使用的是 jQuery 吗?内联 onclick 的概念不是常见的 jQuery 方式,document.getElementById 也不是。无论如何,您不能将 javascript 方法用作表单的操作。
  • 感谢您的宝贵时间!!
猜你喜欢
  • 1970-01-01
  • 2012-10-13
  • 2017-10-12
  • 2011-12-14
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多