【问题标题】:Can't get a JS var inserted into a hidden field无法将 JS var 插入隐藏字段
【发布时间】:2013-12-13 03:37:03
【问题描述】:

我保证...我已经对此进行了超过 24 小时的研究。我知道它与其他一些问题相似(如果不完全相同)。我显然错过了一些东西。 (这将是一个冗长的解释......我道歉。请不要让它吓到你......我很确定根本问题/问题会比这一切看起来容易得多! )

期望的最终结果是让一些 JS 变量从 HTML 表单发布到我的进程 PHP 脚本。很简单吧?

我有一个功能齐全的表单,它使用 一堆 输入字段进行大量计算...这里发布太复杂了...更不用说我真的不想要让自己对我确定是非常糟糕的编码感到难堪!

简而言之...我有一个在运行过程中设置各种 JS 变量的函数。我需要将这些变量插入到一些隐藏的输入字段中,以便它们与所有“正常”输入一起转移到我的处理 PHP 中。所有这些变量都代表浮点数(如果有任何差异)

这是我的表单定义:

<form id="multiForm" action="App_post.php" method="POST" action="javascript:void(0)" id="appform" name="appform">

我有一个“主”函数,它主要根据用户选择各种单选按钮的时间来启动所有计算。当用户选择按钮时,各种选择器在表单中动态更新(实际上是用户选择俱乐部会员费和“附加”项目的不同选项......有人一定会问我在做什么!)

$(function () {
...lots of JS code here along with the calculations that create the JS vars I need
}

(我假设这个函数是通过 action="javascript:void(0)" 调用的)

现在让我们只关注一个 var。完成所有计算后,JS var "regularfee"(以及我想要的所有其他人)就存在了。我需要将这些值插入隐藏字段,以便发布。

以下是隐藏字段的示例:

<input type="hidden" name="regularfee" id="regularfee" value="">

这就是我迷路的地方。在所有计算完成后,我在函数中做了一个 console.log(regularfee)...它设置为浮点数 26.5(这是正确的)

到目前为止,我尝试了以下几件事:

document.getElementById('regularfee').value=regularfee;
//  --OR--
document.getElementById('regularfee').value=regularfee.value;
document.getElementById("app").submit();

无论我尝试了什么,都会将空白值发布到我的 PHP 进程中。根据我看到的其他问题,隐藏输入字段方法似乎是执行此操作的“公认”方法之一。我没有坚持这种方法......只是寻找最简单的方法来发布我的变量!我错过了什么?非常感谢所有帮助!

【问题讨论】:

  • 控制台上是否出现任何 JavaScript 错误?
  • 如果你打开控制台,输入 document.getElementById('regularfee') 会打印什么?
  • @Jack - 没有 JS 错误......正如我所说的那样,表单在当前模式下“工作”很好。问题只是试图让变量“out”
  • @nycynik - console.log 在所有计算完成后的某个时间点显示正则费用的正确值是 26.5
  • @nycynik - 抱歉......请仔细阅读您的问题......我最初只是在控制台中检查常规费用。 document.getElementById('regularfee') 显示为空

标签: javascript html forms input hidden


【解决方案1】:

尝试常规发布或使用 AJAX 提交。

$.fn.serializeObject = function()
{
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name] !== undefined) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};

此方法以您的形式获取所有输入,包括选择和检查。

  //multiForm form is your ID in ur form
 var data = $("#multiForm :input").serializeObject();

使用ajax保存到php脚本后。

         $.ajax({
        type: "POST",
        url: "phpscript.php",
        data: data,
    success: function() {
         alert("Input Success!");
         }
        });

这将如何帮助您!

【讨论】:

  • 请原谅我的无知......但我正在努力听从你的回答。我看不出它在哪里处理 JS var“regularfee”(一个浮点数)。再次...可能只是我的无知,但这似乎做了别的事情。
  • 请输入您的 html 代码,以便我们跟踪您的问题。
【解决方案2】:

从技术上讲,这种语法应该很好用……

document.getElementById('regularfee').value=regularfee;

这是假设regularfee 变量存在并且它是float 类型。或者更好地使用 jQuery

$('#regularfee').val([your value here]);

问题,为什么您的表单中有两个操作?它是如何工作的?

<form id="multiForm" action="App_post.php" method="POST" action="javascript:void(0)" id="appform" name="appform">

另外,为了省心,还可以做一个console.log来检查隐藏字段设置后的值

【讨论】:

  • 我有 2 个动作,因为我不知道我在做什么!! LOL 基于来自 user3075664 的建议,我正在删除第二个操作。 (到目前为止,我所做的大部分工作都与抄袭 sn-ps 和 Internet 上的示例以及在 SO 上查看的许多问题直接相关!在此之前我没有发现。)
  • 愚蠢的问题 - 在控制台中检查隐藏字段 val 的语法是什么?从来没有这样做过!
  • console.log(document.getElementById('regularfee').value);
  • 控制台结果为“未定义”
  • 表示该元素不存在
【解决方案3】:

您的表单中有两个操作属性。删除“javascript:void(0)”的第二个。它没有调用你认为的函数(你在那里的匿名函数看起来是在 dom 就绪时执行的)。

【讨论】:

  • 我在删除它时没有问题,但它是“有助于”解决我的问题还是根本不需要?
  • 不需要。 Q:变量regularfee什么时候设置?
  • regularfee(以及我需要发布的大约 10 个其他变量)设置在主函数调用的末尾附近。我已经尝试了所有你在函数中看到的 after 点,所以我知道所有的变量都设置了我需要的值(它们肯定是浮点数)
  • 好的。提交时,请查看开发工具的“网络”选项卡。如果您检查对 app_post.php 的请求,您是否看到设置的表单值?
  • 我实际上是在做一个 print_r($_POST);在我的进程 PHP 文件中,以帮助进行故障排除。我看到我的所有字段...隐藏和非隐藏,但所有隐藏的都是空白
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多