淘汰:无法将选择值传递给函数

时间:2014-09-02 05:04:45

标签: javascript arrays select knockout.js onchange

简单的noob问题,当我知道解决方案时,可能会踢我自己。

我正在尝试将一个select的值传递给一个函数,所以我可以从数组中删除该项(所以我可以使用cut-down数组进行其他选择 - 基本上每个值只能选择一次),但是select正在传递'Object object'而不是所选的值。

我认为默认情况下选择值是作为第一个参数传递的,所以我不知道发生了什么。任何提示都很受欢迎。

fiddle here

HTML:

<p>Sample rate:
    <select data-bind="options: sampleRates, value: selectedSampleRate0, event: {change: addSrate}"></select>
</p>

JS:

window.onload = startKnockout;

function AppViewModel() {
    var self = this;
    self.sampleRates = ko.observableArray([192000, 176400, 96000, 88200, 48000, 44100]);
    self.selectedSampleRate0 = ko.observable();

    self.addSrate = function (x) {
        alert(x);
    }


    return self;
}

function startKnockout() {
    ko.applyBindings(new AppViewModel());
};

1 个答案:

答案 0 :(得分:3)

任何KO event绑定处理程序的第一个参数是当前的datacontext,因此在您的情况下,您的AppViewModel和第二个参数包含event对象。

所以你需要写:

self.addSrate = function (viewModel, event) {
    alert(event.target.value);
}

作为替代解决方案,您可以subscribe更改selectedSampleRate0以实现相同的功能:

self.selectedSampleRate0.subscribe(function (newValue){
    alert(newValue);
})

演示JSFiddle.