【问题标题】:passing url parameters to hidden field with javascript使用javascript将url参数传递给隐藏字段
【发布时间】:2012-11-04 06:39:05
【问题描述】:

我需要以下代码的帮助。

我需要做的是将 URL 参数传递给这两个隐藏字段。 http://www.yoursite.com/index.php?fieldOne=Work&fieldTwo=Play

它似乎不起作用。我也无法将 id 添加到表单字段。

<input type="hidden" name="fieldOne">
    <input type="hidden" name="fieldTwo">
    <script>
    function FillForm() {
        var FormName = "myformname";
        var qLoc = location.href.indexOf('?');
    if(qLoc < 0) { return; }
    var q = location.href.substr(qLoc + 1);
    var list = q.split('&');
    for(var i = 0; i < list.length; i++) {
        var kv = list[i].split('=');
        if(! eval('document.'+FormName+'.'+kv[0])) { continue; }
        kv[1] = unescape(kv[1]);
        if(kv[1].indexOf('"') > -1) {
            var re = /"/g;
            kv[1] = kv[1].replace(re,'\\"');
        }
      eval('document.'+FormName+'.'+kv[0]+'.value="'+kv[1]+'"');
      }
     }
    FillForm();
    </script>` 

【问题讨论】:

  • 您可以使用[]document[FormName][kv[0]],而不是使用 eval

标签: javascript url parameters field hidden


【解决方案1】:

NULL 进行了简化(尽管您的代码中有一个关于查询迭代的小错误)。这是 NULL 的简化修正,也是我对您为什么没有得到预期结果的猜测:

<form name="myformname">
<input type="hidden" name="fieldOne">
<input type="hidden" name="fieldTwo">
</form>
<script type="text/javascript">

  var formName = "myformname",
  query = location.href.split("?").pop().split("&"),
  i = 0,
  len = query.length,
  split, elem;

  for ( ; i < len; i++ ) {
      split = query[i].split("=");

      //alert(split);

      elem = document[formName][split[0]];

      if ( elem ) {
          elem.value = split[1].replace(/"/g, '\\"');
      }
  }
</script>

1) 确保您使用的是带有 id 的 form 标记。我看不到你的 HTML。

2) 确定您没有在隐藏的&lt;input&gt; 中看到新数据?我建议使用调试器并检查实时 DOM 树而不是源代码。一些调试器不会实时更新源代码。

编辑:

根据来自提问方的新信息,这里有另一个解决办法:

<script type="text/javascript">

$(document).ready(function(){

    var formName = "dSOfferAllE10Test-1349977611926";

    var query = location.href.split("?").pop().split("&");
    var len = query.length;
    var split, elem;

    for (var i = 0; i < len; i++ ) {

        split = query[i].split("=");

        $('form[name="'+formName+'"]').find('input[name="'+split[0]+'"]').each(function(){

          $(this).val(split[1].replace(/"/g, '\\"'));

        });
    }
});

</script>​​​​​​​​​​​​​​​​​​​​​​​​​​​​

这使用 jQuery,因此请确保在您的 &lt;head&gt; 中附加对 jQuery 的引用(如果您无法访问 &lt;head&gt;,则至少在 &lt;body&gt; 的顶部附近。最好抓住来自 Google 托管版本的 sn-p:https://developers.google.com/speed/libraries/devguide#jquery

【讨论】:

  • 我输入你的代码,我的页面弹出一个窗口,显示参数fiedlOne,fieldTwo。我的表单代码也有 id。它也不适合我。
  • 忽略警报,这只是为了测试目的。请告诉我调试器中抛出了哪些错误(如果有)。另外,让我知道您对在浏览器中进行调试了解多少——因为听起来您可能根本没有进行任何调试...在这种情况下,您需要先研究如何使用 Chrome 开发人员工具或 Firebug 进行调试...
  • 你是对的。我真的不知道如何调试。这是我正在处理的登录页面:view-source:datasitedeal.com/… 我试图做的是将leadsource 和campaignid 值传递到隐藏字段中。
  • 好的,问题基本上是您尝试引用的隐藏输入在各种 div 中嵌套得太深,以使上述代码正常工作。上面的代码假定您使用的 标记是表单的子项。在你的情况下,它不是,它是几个孩子下来。这就是像 jQuery 这样的东西有用的地方。将修改我上面的答案以反映这一结论。
  • 酷谢谢。我真的无法更改表单代码。我正在尝试使用 javascript 让它工作。
【解决方案2】:

您可以简化代码:

var formName = "myformname",
    query = location.href.split("?").pop().split("&"),
    i = 0,
    len = query.length,
    split, elem;

for ( ; i < len; i++ ) {
    split = query.split("=");
    elem = document[formName][split[0]];

    if ( elem ) {
        elem.value = split[1].replace(/"/g, '\\"');
    }
}

【讨论】:

  • 它仍然无法正常工作。我正在尝试从我的页面发布代码,但它给我带来了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 2015-09-12
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
相关资源
最近更新 更多