【发布时间】: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 告诉我...我喜欢给出一个起点而不是给出一个解决方案。帮助大家学习。