【问题标题】:Fetch id and value for each form section获取每个表单部分的 id 和 value
【发布时间】:2019-07-28 15:12:21
【问题描述】:

我有下面的表格并试图获取 id 和 value 并将数据放入 json 以传递给我的控制器。下面是代码。我看不到我错过了什么。这是第一次进入 Web 开发

<div class="form-section">
    <div class="section-header">
        <span class="collapse-symbol"><i class="fas fa-angle-right"></i></span>
        <span class="section-title">
            Term
        </span>

    </div>
    <div class="content" id="quote-edit-form">

<div class="row-container">

    <div class="row-child">
        <label class="control-label" for="StartDate">StartDate Date</label>

        <input class="form-control text-box single-line" data-val="true" data-val-date="The field Start Date must be a date." id="Start-date" name="Terms.StartDate" type="datetime" value="" />

        <label class="control-label" for="Terms_Date">Terms Date</label>

        <input class="form-control text-box single-line" data-val="true" data-val-date="The field Terms Date must be a date." id="continuity-date" name="Terms.ContinuityDate" type="datetime" value="" />

        <label class="control-label" for="Terms Period">Extension Period</label>

        <input class="form-control text-box single-line" id="expiry-date" name="Terms.ExtensionPeriod" type="text" value="" />
    </div>

    <div class="row-child">
        <label class="control-label" for="Terms.Choice">Choice</label>

        <input class="form-control text-box single-line" id="expiry-date" name="Terms.Law" type="text" value="" />

        <label class="control-label" for="Terms_C">C</label>

        <input class="form-control text-box single-line" data-val="true" data-val-number="The field Commission must be a number." id="expiry-date" name="Terms.C" type="text" value="" />

        <label class="control-label" for="Terms_P">P</label>

        <input class="form-control text-box single-line" id="expiry-date" name="Terms.P" type="text" value="" />


    </div>
</div>

我尝试了以下方法从我的 html 中捕获数据

 var items = {};
    $('.form-control text-box single-line').each(function () { 
        var obj = {
            id: $(this).find('.id').val(), 
            value: $(this).find('.value').val() 
        };
        o.items.push(obj); 
    });

【问题讨论】:

    标签: javascript jquery asp.net asp.net-mvc-4


    【解决方案1】:

    这里将使用 id/value 构建一个对象。注意:我添加了设置间隔,以便您可以键入并查看正在填充的对象。

    const buildItems = () => {
      let items = {};
      document.querySelectorAll('input').forEach(element => {
        items[element.id] = element.value;
      });
      return items;
    };
    
    // check every 5secs (just to demo working)
    setInterval(() => console.log(buildItems()), 5000);
    <div class="form-section">
        <div class="section-header">
            <span class="collapse-symbol"><i class="fas fa-angle-right"></i></span>
            <span class="section-title">
                Term
            </span>
    
        </div>
        <div class="content" id="quote-edit-form">
    
    <div class="row-container">
    
        <div class="row-child">
            <label class="control-label" for="StartDate">StartDate Date</label>
    
            <input class="form-control text-box single-line" data-val="true" data-val-date="The field Start Date must be a date." id="Start-date" name="Terms.StartDate" type="datetime" value="" />
    
            <label class="control-label" for="Terms_Date">Terms Date</label>
    
            <input class="form-control text-box single-line" data-val="true" data-val-date="The field Terms Date must be a date." id="continuity-date" name="Terms.ContinuityDate" type="datetime" value="" />
    
            <label class="control-label" for="Terms Period">Extension Period</label>
    
            <input class="form-control text-box single-line" id="expiry-date" name="Terms.ExtensionPeriod" type="text" value="" />
        </div>
    
        <div class="row-child">
            <label class="control-label" for="Terms.Choice">Choice</label>
    
            <input class="form-control text-box single-line" id="expiry-date" name="Terms.Law" type="text" value="" />
    
            <label class="control-label" for="Terms_C">C</label>
    
            <input class="form-control text-box single-line" data-val="true" data-val-number="The field Commission must be a number." id="expiry-date" name="Terms.C" type="text" value="" />
    
            <label class="control-label" for="Terms_P">P</label>
    
            <input class="form-control text-box single-line" id="expiry-date" name="Terms.P" type="text" value="" />
    
    
        </div>
    </div>

    【讨论】:

      【解决方案2】:
      • $('.form-control text-box single-line') 应该是$('.form-control.text-box.single-line')

      • 要获取 id,请使用 .attr('id')

      • 为了获得价值使用$(this).val()
      • 要获取数据,请使用data('val').attr('data-val')
      • items = {}; 应该是 items = [];
      • ID 应该是唯一的。所以不要对多个元素使用相同的 id

      var items = [];
      $('.form-control.text-box.single-line').each(function () { 
          var obj = {
              id: $(this).attr('id'),
              dataVal : $(this).attr('data-val'),
              value: $(this).val() 
          };
          items.push(obj); 
      });
      console.log(items);
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      
      <input class="form-control text-box single-line" id="expiry-date1" name="Terms.Law" data-val="dataVal1" type="text" value="1" />
      <input class="form-control text-box single-line" id="expiry-date2" name="Terms.Law" data-val="dataVal2" type="text" value="2" />
      <input class="form-control text-box single-line" id="expiry-date3" name="Terms.Law" data-val="dataVal3" type="text" value="3" />

      要为每个 obj 添加一个密钥 .. 使用 { [key] : .... }

      var items = [];
      $('.form-control.text-box.single-line').each(function () { 
          var obj = { 
            [$(this).attr('data-val')] : {
              id: $(this).attr('id'),
              dataVal : $(this).attr('data-val'),
              value: $(this).val() 
            }
          }
          items.push(obj); 
      });
      console.log(items);
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      
      <input class="form-control text-box single-line" id="expiry-date1" name="Terms.Law" data-val="dataVal1" type="text" value="1" />
      <input class="form-control text-box single-line" id="expiry-date2" name="Terms.Law" data-val="dataVal2" type="text" value="2" />
      <input class="form-control text-box single-line" id="expiry-date3" name="Terms.Law" data-val="dataVal3" type="text" value="3" />

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-15
        相关资源
        最近更新 更多