我正在开发一个 SPA 网络应用程序,但遇到了问题。我有一个接受文本的输入字段,如下所示:
<input type="text"
data-bind="typeahead: containers(),
updater: containerupdatefunction,
attr: { placeholder: 'ABCD-123456-7' },
event: { change: checkContainerNumber },
value: containerNumber,
style: { backgroundColor: containerNumberCorrect() ? 'rgba(0,255,0,0.4)' : 'rgba(255,0,0,0.4)' } "
required />
一切都正确加载。这是我想要但无法工作的内容:
当我单击输入字段并输入一个字符时,我会得到一个包含自动完成单词的列表,它可以正常工作,但是,当我单击其中一个时,update
两个功能都会被触发。如果containerupdatefunction
在此之前触发,checkContainerNumber
则我的值已正确加载,但这仅发生 10 次。
我需要这两个更新功能,因为这个输入字段还允许用户输入一个新数字。但这需要首先检查。
知道如何解决这个问题吗?ValueUpdate 的东西(已经尝试过但还可以)?
如果包含在 event: 中的函数在 thechange{checkContainerNumber }
之前触发,updater:
那么我得到的值就是我输入的几个字符的值。所以当我选择其中一个时,不是自动完成。
有人可以帮忙吗,如果有什么遗漏或者您需要更多信息,请告诉我。
请记住,仅当您单击自动完成列表的值时才会触发更新程序功能。
这是淘汰赛引导绑定: // 绑定 twitter typeahead
ko.bindingHandlers.typeahead = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var $element = $(element);
var allBindings = allBindingsAccessor();
var typeaheadArr = ko.utils.unwrapObservable(valueAccessor());
$element.attr("autocomplete", "off")
.typeahead({
'source': typeaheadArr,
'minLength': allBindings.minLength,
'items': allBindings.items,
'updater': allBindings.updater
});
}
};
这是我的模型视图:
this.checkContainerNumber = function(item, element) {
var t = $(element.target).val();
};
this.containerupdatefunction = function(item, element) {
var t = item;
containerNumber(item);
return item;
};
/*
this.checkContainerNumber = function (item, element) {
if (!updaterTriggered()) {
if (containerNumber().length == 13) {
checkContainerNumberFunction(containerNumber());
updaterTriggered(true);
} else {
containerNumberCorrect(false);
}
}
return;
};
function checkContainerNumberFunction(containerNumberToCheck) {
try {
if (mapContainers[containerNumberToCheck].ContainerNumber() != undefined) {
container(mapContainers[containerNumberToCheck]);
return;
}
} catch(err) {
}
if (containerNumberToCheck.trim().length == 13 && containerNumberToCheck != undefined) {
$.get(
"http://localhost:60312/api/baseapi/checkContainerDigit?digit=" + containerNumberToCheck,
function (data) {
if (data == true) {
containerNumberCorrect(true);
} else {
containerNumberCorrect(false);
}
updaterTriggered(false);
}
);
} else {
containerNumberCorrect(false);
updaterTriggered(false);
}
};
this.updateViewAfterContainerSelection = function (item) {
if (!updaterTriggered()) {
updaterTriggered(true);
containerNumber(item);
checkContainerNumberFunction(containerNumber());
}
return item;
};
*/
这是我到目前为止所尝试的!