Jquery自动完成与knockoutjs

时间:2012-11-22 06:26:27

标签: jquery knockout.js jquery-autocomplete

我正在使用带有knockoutjs的jquery自动完成功能。它与键盘和鼠标点击事件一起工作正常。但我的问题是,当我输入任何不存在的名称时,它会在我的页面中显示该名称(存储在可观察变量中)。

这是我的javascript代码:

 //For autocomplete extender generating members
$(function () {
    $('.tags').autocomplete({

        //make ajax call to get all mentored member of logged member
        source: function (request, response) {
            $.ajax({
                url: "Members.aspx/GetAllMembers",
                data: "{ 'prefixText': '" + request.term + "' }",
                dataType: "json",
                type: "POST",
                contentType: "application/json; charset=utf-8",
                success: function (data) {
                    response(data.d);
                    self.memberOptions(data.d);
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert('error occured while autocomplete');
                }
            });
        },
        minlength: 0,
        select: function (event, ui) {
            //get selected member name
            self.selectedMember(ui.item.actualValue ? ui.item.actualValue : ui.item.value ? ui.item.value : "");
            self.LoadAddress(self.choosenDateId(), self.selectedMember());
        }
    });
});

我需要的是,当我输入无效名称时,页面应该显示loggeduser的地址(出现在会话中)。即self.selectedMember(userName)。

2 个答案:

答案 0 :(得分:1)

我在select事件之后添加了以下块并且它可以工作:

change: function (event, ui) {
            if (!ui.item) {
                //if invalid name selected, load goals of logged user
                self.selectedMember(userName)
                self.LoadAddress(self.choosenDateId(), self.selectedMember());
            }
        },

答案 1 :(得分:0)

你正在将原生的jQuery代码与淘汰混合,不要这样做。 KO的重点是消除模型和视图之间的依赖关系。请使用自动完成绑定

How to create an auto-complete combobox?