【问题标题】:Grabbing values from outside of a form从表单外部获取值
【发布时间】:2013-08-07 20:56:36
【问题描述】:

我需要从页面的另一部分获取代码而不将其放入表单中……有没有办法使用 JavaScript/jQuery 来实现?

基本上,我想从这里获取价值:

<div class='span5' style='margin-left:0px !important;'>
    <label for='area0'>
        <input type='checkbox' name='area' id='area' value='West Palm Beach' style='margin-top:-5px !important;'>
        West Palm Beach
    </label>
</div>

并将其放入同一页面其他地方存在的表单中。

<form method="post" class="form-horizontal" id="final_form" action="send_mail.php">
    MORE INPUTS
</form>

有没有一种简单的 JavaScript 方法可以做到这一点?如果复选框被选中,我只想获取该值并将其分配为表单中的值,以便将其传递给 send_mail.php。

【问题讨论】:

  • 肯定有。你试过什么?
  • 什么都没有。我什至不知道从哪里开始。
  • 我不知道其他人,但我可以使用更多信息。什么触发了“抢”?一个按钮点击?按钮在哪里?您希望如何将值放入表单中?也许在隐藏的输入中?
  • 你想移动值本身,把它放在一个新的容器中(div?输入?段落中间?)或者你想克隆/移动一些元素并把它放在其他地方?之前和之后的代码示例可能会非常清楚地说明这一点。
  • 我想将它添加为一个不在其他表单中显示的值,但会传递给 send_mail.php

标签: javascript jquery html forms


【解决方案1】:

您可以在表单中添加一个隐藏字段,例如:

<input type="hidden" id="area_is_checked" name="area_is_checked" />

然后在提交表单之前使用JQuery获取复选框值:

$("#final_form").submit(function () {
  $("#area_is_checked").val($("#area").is(':checked'));
  return true;
});

【讨论】:

  • 返回 true 确保表单在函数之后提交。我只是把它放在那里让用户知道有可能返回 false 并避免提交。
  • 在 php 中,我应该调用 'area' 还是 'area_is_checked'
  • 我得到了那个部分......我想实际调用这个值(西棕榈滩)。我该怎么做?
  • 这只是每次都返回真......即使我插入不同的返回值。
【解决方案2】:

当然!

$('form#new-location').append($("div#move-me-please"));

这是一个 jsFiddle:http://jsfiddle.net/zwxPt/

编辑:因为在我写这个之后答案被编辑了:

如果您确实无法在表单中添加隐藏字段,您仍然可以在用户通过 ajax 提交表单时向表单中添加额外数据。请参阅this stackoverflow question 了解更多信息。

【讨论】:

  • OP 不想把它放在表单中
  • @Sushanth-- OP 想知道如何。既然他没有解释什么要移到哪里,那么这是一个很好的例子。
【解决方案3】:

您可以使用form attribute(至少适用于 Opera 9.5+、Safari 5.1+、Firefox 4+、Chrome 10+):

<input type='checkbox' name='area' id='area' value='West Palm Beach' style='margin-top:-5px !important;' form="final_form">

有一个 Modernizr 测试。但是,您仍然可以使用 form 属性,然后搜索那些而不是像下面这样对外部输入进行硬编码:

$('#final_form').on('submit', function() {
    $('input[form=' + this.id + ']').each(function() {
        var externalInput = $(this);
        // then same as below.
    });
});

或者使用 jQuery 代替 form 属性:

$('#final_form').on('submit', function() {
    var externalInput = $('#area');
    var name = externalInput.attr('name');
    /* use existing */
    var hidden = $(this).find('input[name=' + name + ']');
    /* create a new hidden field */
    if ( ! hidden.length ) {
        hidden = $('<input>', {
            name: name
        }).appendTo(this);
    }
    hidden.val(externalInput.is('[type=checkbox]') ? externalInput.prop('checked') : externalInput.val())
});

这将创建一个隐藏字段,或者,如果您正在对其进行验证并且它可能实际上并未提交,请使用已添加的字段。这不需要更新到 HTML。

【讨论】:

  • IE 支持那个了吗?
  • IE不支持form属性,但是jquery方法应该可以。
【解决方案4】:

是的,有..

    <div id="inputsBlock" class='span5' style='margin-left:0px !important;'>
    <label for='area0' style="display: none;">
        <input type='checkbox' name='area' id='area' value='West Palm Beach' style='margin-top:-5px !important;'>
        West Palm Beach
    </label>
</div>
<form method="post" class="form-horizontal" id="final_form" action="send_mail.php">
MORE INPUTS
</form>

<script>
$('#inputsBlock').children().clone().css({display: 'none'}).appendTo($('#final_form'));
</script>

【讨论】:

  • 这是否仍会分配给 send_mail.php 中的 'area' 值?
  • 是的..提交的时候会传过去的。
  • 这使它在表单中显示。如何隐藏它但仍将该值传递给 send_mail.php。
  • 已编辑.. 立即查看答案。只需添加显示:无;到要隐藏的元素
  • 这不是将它隐藏在表单之外的实际显示位置吗?
猜你喜欢
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多