【问题标题】:Select input from multiple inputs within a form?从表单中的多个输入中选择输入?
【发布时间】:2014-12-23 04:49:08
【问题描述】:

上下文摘要

在加拿大,有以“9”开头的临时 SIN,用于等待他们的 SIN 的移民。

一旦他们收到新的“真实”SIN,我们必须能够根据公民姓名和出生日期更新值(这对于我正在开发的系统来说已经足够了)。

一旦将新公民添加到合同中,并且输入了她/他的出生日期,就会进行 ajax 调用以确定匹配的参与者是否匹配,并向随后的用户建议可能的匹配确认是否有真正的匹配。

一旦匹配,系统必须更新现有用户并删除新添加的用户,以避免重复条目。这意味着要更改给定参与者的 SIN,必须在上一步添加新参与者,系统会报告新创建的参与者并提示用户输入更多信息细节,例如出生日期。当“日期时间选择器”关闭时,会调用一个 ajax 来查找该匹配项,如上所述。

但是,选择新 SIN 编号项目的代码无法按预期工作。它不是针对找到的参与者,而是选择找到的第一个参与者,这实际上是一个“真正的”新参与者。

代码示例

新参与者在网页中列出如下:

<!-- Here is the very new participant -->
<tr id="17" rel="17">
    <input type="text" value="SURNAME17, GIVENNAME17">
    <input type="text" id="txtSIN17" value="123456789">
</tr>
<!-- Here is the participant I'd like to get the SIN from -->
<tr id="18" rel="18">
    <input type="text" value="SURNAME18, GIVENNAME18">
    <input type="text" id="txtSIN18" value="487654321">
</tr>

系统选择参与者的方式是:

$("input[id^=txtSIN]").val();

这不可避免地总是返回第一次出现,即 SIN:123456789。我想获取另一个 SIN:487654321

但是,我无法预测不时需要的 tr id 是什么,我相信我需要依靠第一个输入文本才能知道这个 "id"

在我开始思考之前,我不得不提一下,当系统要求匹配时,我已经从底层数据库中收集了姓名和临时 SIN。我可能建立关系的唯一方法是通过找到的匹配项的姓名和出生日期。

到目前为止...

我想,将匹配的参与者的值放在串联的 ListBox 值中,如下所示:

function PerformSINChange(changeSIN) {
    if (changeSIN != 0) {
        // pseudo-code, since I don't yet know how to achieve what I want in jQuery.

        // So I have the confirmed match here formatted as:
        // "999999999 | SURNAME18, GIVENNAME18 | 1986-09-14 | 9"
        var selectedMatch = $('select[id$=lstExistingParticipant]').val();
        var selectedMatchName = selectedMatch.Split("|")[1].Trim();
        var inputTextIdToSelect;

        $("#form1 input[type=text], select").each(function(inputText) {
            if (selectedName == $(inputText).val()) {
                inputTextIdToSelect = $(inputText).Id();
                break;
            }
        });

        var newSINInputText = "txtSIN" + inputTextIdToSelect;
        var newSINValue = $(newSINInputText).val();
          
        var matchedParticipant = new Object();
        matchedParticipant.TemporarySIN = selectedMatch
        matchedParticipant.NewSIN = newSINValue;

        if (matchedParticipant.TemporarySIN != "" && matchedParticipant.TemporarySIN != null)
            $.ajax({
                type: 'POST'
                , data: matchedParticipant
                , url:  p.transformURL("ajax/verify_participant.ashx");
                , async: false
                , cache: false
                , success: function (xmlResponse) {
                      if (xmlResponse != "") {
                          $('tr[id$=' + xmlResponse + ']').unbind();
                          $('tr[id$=' + xmlResponse + ']').remove();

                          var tableRow = $('.datatable_table_part tbody tr')
                          var tableBody = $('.datatable_table_part tbody') 

                          if (tableRow.length == 0)
                              tableBody.append('<tr><td colspan="6">' + emptyTableMsg + '</td></tr>');
                      }
                  }
             });
        } 
    }

    $.fancybox.close();
}

我不太确定如何从这里开始。

我该如何从这里开始,我的想法有什么好处吗?如果是这样,实现此目的的正确语法是什么?

一些相关发现

【问题讨论】:

  • "...已添加到合同中"。这份合同是从哪里来的?
  • 该系统包含一个 RRSP 评估管理,雇主可以在其中输入给定时期的雇员评估。因此,首先,雇主必须选择输入会费的合同。这个问题与进入参与者评估的功能有关。为了指定 SIN 的更改,雇主只需添加一个他必须提供出生日期的新参与者,然后系统将找到该个人并要求匹配确认,所有这些都在当前选择的合同中必须输入哪些贡献。
  • 谢天谢地,我不是在加拿大出生的。听起来很复杂。
  • 功能概念本身真的很简单,而且这不是针对加拿大新出生的人,只针对移民。复杂性在于系统的架构方式。
  • 如果您需要更多:jsfiddle.net/29ov2ynw 告诉我...我喜欢给出一个起点而不是给出一个解决方案。帮助大家学习。

标签: jquery ajax post


【解决方案1】:

基于@morissette 在我的问题的 cmets 中的命题:

如果您需要更多:jsfiddle.net/29ov2ynw 告诉我...我喜欢给出一个起点而不是给出一个解决方案。帮助大家学习。

我的问题应该是:

如何使用 jQuery 循环遍历多个表格行?

从@morissette 给我的开始我的挖掘,我想出什么来解决我的问题。

var participantNameIndex = 1;
var selectedMatch = '987654321 | SURNAME18, GIVENNAME18 | 1986-09-14 | 9';
var existingName = selectedMatch.split('|')[participantNameIndex].trim();    

$('table tr').each(function (i, row) {
    var newParticipantName = $(':last-child', this).val();
    var isMatch = existing == newParticipantName;

    if (isMatch) {
        var sinId = $(row).attr('id');
        var newSinInputName = "input[id^='txtSIN" + sinId +"']";
        var newSin = $(newSinInputName).val();
        alert(newSin); // Finally obtained the new SIN!!!

        return false; // Simple loop break
    }
});

之后最大的问题是在我找到的生产代码中找到正确的选择器。现在这按预期工作。

【讨论】:

    猜你喜欢
    • 2014-12-04
    • 2020-07-19
    • 2018-12-06
    • 2022-09-28
    • 1970-01-01
    • 2021-06-12
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多