Javascript 按文本值剔除所选选项

Javascript 按文本值剔除所选选项,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我有一个应用程序,允许用户制作具有多个课程区域的课程。从“选择”下拉列表中选择课程区域。列表是使用knockout绑定的数据 HTML 我尝试过根据元素id来更改它,我尝试过.val、.prop、.attr,但没有成功。当我将数据记录到元素的控制台时,它没有在下拉列表中显示值,所以我感觉knockout在脚本级别添加值,jquery无法看到这些值。基本方法是,您需要将select元素的值绑定到一个可观察对象,该对象保存应选择的课程类型的ID 我做了一把简单的小提琴,在演奏中展示了这一点: JS

我有一个应用程序,允许用户制作具有多个课程区域的课程。从“选择”下拉列表中选择课程区域。列表是使用knockout绑定的数据

HTML
我尝试过根据元素id来更改它,我尝试过.val、.prop、.attr,但没有成功。当我将数据记录到元素的控制台时,它没有在下拉列表中显示值,所以我感觉knockout在脚本级别添加值,jquery无法看到这些值。

基本方法是,您需要将select元素的值绑定到一个可观察对象,该对象保存应选择的课程类型的ID

我做了一把简单的小提琴,在演奏中展示了这一点:

JS是:

function CourseArea(types) {
   this.types = ko.observableArray(types);
   this.typeid = ko.observable(2); 
};


var types = [
    { id: 1, name: "one" },
    { id: 2, name: "two" },
    { id: 3, name: "three" }
];

ko.applyBindings(new CourseArea(types));
HTML是:

<select data-bind="options: types, optionsText: 'name', optionsValue: 'id', value: typeid"></select>
还要确保您在CourseAreaViewModel.typeid中选择的ID在CourseAreaTypeViewModel.ID中具有等效的精确值

并确保您的数据符合代码OK。。。例如,类型数据必须以大写字母提供其ID,以便
self.ID=courseAreaTypeIn.ID
有用。如果没有,那么你赢了;t获取错误,因为
self.id
将被悄悄地设置为
undefined

这里有一把小提琴,展示了所有这些与课程、区域和类型有关的工作:


看起来您的JS缺少一个右括号,这反过来使它看起来像CourseAreaTypeViewModel和CourseAreaViewModel是在CourseViewModel中定义的。。。我猜你不是这个意思,所以我整理了你的格式-看起来怎么样?你是对的。谢谢
function CourseArea(types) {
   this.types = ko.observableArray(types);
   this.typeid = ko.observable(2); 
};


var types = [
    { id: 1, name: "one" },
    { id: 2, name: "two" },
    { id: 3, name: "three" }
];

ko.applyBindings(new CourseArea(types));
<select data-bind="options: types, optionsText: 'name', optionsValue: 'id', value: typeid"></select>
$.getJSON("/Course/GetCourseAreaTypes", function (types) {
    // Load all the types first.
    $.each(types, function (index, type) {
        self.courseAreaTypes.push(new CourseAreaTypeViewModel(type));
    });

    // Continue here, to be sure you have a complete list of types to work with.
   $.each(courseIn.CourseAreas, function (index, courseArea) {
        self.courseAreas.push(new CourseAreaViewModel(courseArea));
    });
});