【问题标题】:How to get updated form input value via jQuery/Javascript?如何通过 jQuery/Javascript 获取更新的表单输入值?
【发布时间】:2018-06-06 12:21:18
【问题描述】:

我看到很多关于通过 jQuery 设置和获取字段值的讨论。但我的问题是我提交后无法获取值,然后在输入字段中编辑值,然后再次提交。所以第一次有效,第二次无效。

这是我的场景:我有一个用于管理数据集过滤器的表单:

<form id="filtersForm">
  <div class="row">
    <div class="col-md-12">
      <div id="addContactFilter">
        <div class="row filterRow" id="contact_filter_780b902d">
          <div class="col-md-4">
            <!-- Selectize dropdown of fields to query by -->
            <div class="control-group">
              <select id="filterField_780b902d" class="selectizeField selectized" name="filterField_780b902d" placeholder="Select field..." tabindex="-1" style="display: none;">
                <option value="firstName" selected="selected">First Name</option>
              </select>
              <div class="selectize-control selectizeField single">
                <div class="selectize-input items has-options full has-items">
                  <div data-value="firstName" class="item">First Name</div>
                  <input type="text" autocomplete="off" tabindex="" style="width: 4px; opacity: 0; position: absolute; left: -10000px;">
                </div>
                <div class="selectize-dropdown single selectizeField" style="display: none; visibility: visible; width: 248px; top: 34px; left: 0px;">
                  <div class="selectize-dropdown-content">
                    <div data-value="firstName" data-selectable="" class="option selected">First Name</div>
                    <div data-value="lastName" data-selectable="" class="option">Last Name</div>
                    <div data-value="organization" data-selectable="" class="option">Organization</div>
                    <div data-value="jobTitle" data-selectable="" class="option">Job Title</div>
                    <div data-value="city" data-selectable="" class="option">City</div>
                    <div data-value="state" data-selectable="" class="option">State</div>
                  </div>
                </div>
              </div>
            </div>
          </div>
          <div class="col-md-4">
            <select id="filterOperator_780b902d" class="form-control">
              <option value="=">equals</option>
              <option value="contains">contains</option>
            </select>
          </div>
          <div class="col-md-4">
            <div id="contact_filter_value_780b902d">
              <!-- THIS IS THE FIELD IN QUESTION -->
              <input class="form-control" type="text" name="filterValue_780b902d" id="filterValue_780b902d" data-type="String" placeholder="Input Value">
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
  <div class="row filterCriteria">
    <div class="col-md-12">
      <input class="btn btn-default" type="submit" value="Submit">
    </div>
  </div>
</form>

当我第一次提交表单时,我能够成功获取 ID 为 #filterValue_780b902d 的输入字段的值。但是如果用户在表单中修改了值,然后再次提交,就会返回原来的值。

这是我尝试检索该值的方法(我使用的是 Meteor JS,它在带有 event 参数的点击事件上提供了一个 event map):

var target    = event.target,
    fieldName = 'filterValue_' + fieldId;
    thisVal1  = target[fieldName].value,
    thisVal2  = template.find( "[name='" + fieldName + "']" ).value,
    thisVal3  = $( '#' + fieldName ).attr('value'),
    thisVal4  = $( '#' + fieldName ).val();

当我第一次使用输入值“Meghan”提交表单时,这是响应日志:

contactFilters.filtersForm submit
contactFilters.filtersForm.fieldId: 780b902d
contactFilters.filtersForm.fieldName: filterValue_780b902d
contactFilters.filtersForm.thisVal1: Meghan
contactFilters.filtersForm.thisVal2: Meghan
contactFilters.filtersForm.thisVal3: undefined
contactFilters.filtersForm.thisVal4: Meghan

但是当我将输入值更改为“Karen”时,我得到的结果如下:

contactFilters.filtersForm submit
contactFilters.filtersForm.fieldId: 780b902d
contactFilters.filtersForm.fieldName: filterValue_780b902d
contactFilters.filtersForm.thisVal1: Meghan
contactFilters.filtersForm.thisVal2: undefined
contactFilters.filtersForm.thisVal3: undefined
contactFilters.filtersForm.thisVal4: undefined

所以三个问题:

  1. 为什么更新字段文本时thisVal1不更新?
  2. 为什么thisVal2thisVal4 变成undefined
  3. 获取在输入字段值更新时将更新的字段值的正确方法是什么?

提前感谢您的帮助!

【问题讨论】:

  • @HeribertoLugo 标题可能重复,但内容(问题)不是。他只是不知道如何写出正确的问题
  • 你的标题问题答案是:$(selector).val(); 但如果我读到这个ut if the user edits the value in the form, then submits again, the original value is returned. 你的问题不仅仅是你的javascript,也可能是你的php
  • 感谢您的反馈。这不是那个问题的重复,因为在我的情况下,我可以使用 .val() 获取输入的值,我只是在编辑字段后无法获取它。我将在下面@heriberto-lugo 的答案中添加更多细节。
  • 我认为问题可能在于您如何使用流星 js。这个问题没有用meteor js标记,也许应该是。我无法想象为什么这会是服务器端问题(使用您的 php 或您可能使用的任何东西),它似乎很可能是客户端问题。

标签: javascript jquery html forms meteor


【解决方案1】:

我相信在 jQuery 中获取价值的正确方法是使用 val() 函数。

所以你可能应该使用:

var target    = event.target,
    fieldName = 'filterValue_' + fieldId;
    myValue  = $( '#' + fieldName ).val();

如此处所述: https://stackoverflow.com/a/15903284/6368401 和这里: http://api.jquery.com/val/

在 JavaScript 中

document.getElementById("input_id").value

此处解释的其他 javascript 方法: How do I get the value of text input field using JavaScript?

回答您的“未定义”问题:

var target    = event.target,
    fieldName = 'filterValue_' + fieldId;
    thisVal1  = target[fieldName].value,

这是从回发中获取原始值。

thisVal2  = template.find( "[name='" + fieldName + "']" ).value,

我无法回答这个问题,因为我不知道答案

thisVal3  = $( '#' + fieldName ).attr('value');

属性“value”从未在标记中定义。

【讨论】:

  • 感谢您的周到回答。完全忘记了我已经从选项中删除了.val()。但同样的事情也发生在上面的thisVal2 上。第一次提交时,它返回正确的值,Meghan,但是当我在浏览器中更改输入的值并再次提交时,它返回undefined
猜你喜欢
  • 2013-05-24
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
  • 2016-05-21
  • 2023-01-26
  • 1970-01-01
  • 2015-11-08
  • 1970-01-01
相关资源
最近更新 更多