使用jquery在提交时将javascript变量发送到rails变量

时间:2014-01-15 17:15:11

标签: javascript jquery ruby-on-rails ajax

所以我在我的html.erb视图中生成了这个javascript变量,我希望将其发送到rails变量表单提交。我知道我可以使用jquery或ajax做到这一点,但我的尝试失败了。这是我正在尝试的:

Rails变量:

<%= f.text_field :antennatime, :id => "antenna_time" %>

一些HTML:

<input type="checkbox" id="Antenna" onclick="fun();" value="1"> 

我的javascript:

<script>
var str = "This is Some Sample Text";
var ant = document.getElementById("Antenna").checked;

if(antenna == true){
    $(document).ready(function(){
        $("antenna_time").val(str);
    });
}
</script>

出乎我的意料,这不起作用。有人可以显示我应该使用的步骤来使用jquery或ajax将我的javascript变量str发送到我的rails变量:antennatime吗?

3 个答案:

答案 0 :(得分:1)

看起来你拼错了一个变量而错过了jQuery选择器中的#

var str = "This is Some Sample Text";
var ant = document.getElementById("Antenna");

if (ant.checked){
    $(function(){ // same as $(document).ready()
        $('#antenna_time').val(str);
    });
}

为清楚起见,使用if语句用于检查表达式/评估 - 我会在那里添加.checked逻辑,因为它更清楚发生了什么。

答案 1 :(得分:1)

你的问题有点令人困惑。让我解释一下,确保我理解:你有一个表单,其中一个字段填充了模型的属性,当设置了一个复选框时,你想使用javascript设置该字段的值。

所以实际上,你没有设置一些“rails变量”,而是在将表单提交给服务器之前更改表单中的一个字段。

所以,在这种情况下很简单,你只是省略了jquery中的#。所以你必须写

$('#antenna_time').val(str)

这会将字段设置为请求的值。但是根据你的代码,它只会在加载页面和单击复选框时执行此操作。

这可能是你想要的,但我会怀疑你

  • 要在单击复选框时设置/取消设置? (fun()功能未显示 - 说出神秘的名字)
  • 仅在提交之前进行检查(可能会让用户感到困惑,为什么不检查服务器端复选框的值,而不是“

请注意,要设置 rails变量,您必须向服务器发布内容。

目前还不完全清楚为什么要覆盖字段的id,这可能是危险的,因为rails使用id / names来构建将params哈希发布到rails服务器。模型中属性的输入字段的id总是按如下方式构建:<model-name>_<attribute-name>这是唯一的(并且清晰的),只需使用它即可。

答案 2 :(得分:0)

您需要比较ant变量而不是antenna,因为您已将其定义为if条件以上,并使用#定位元素{{1}名为id

还将所有代码包装在DOM中,最终代码如下所示:

antenna_time