使用jquery don'更新字段;t更新可观察到的

Update field with jquery don't update observable

本文关键字:更新 观察 字段 jquery 使用 don      更新时间:2023-09-26

我想向stackoverflow社区问好。

几天前我刚开始使用淘汰赛。

好吧,我正在用它为我正在工作的CMS制作一个动态菜单生成器。

这是代码:http://jsfiddle.net/dnlgmzddr/HcRqn/

问题是,当我从选择框中选择一个元素时,输入字段会像我预期的那样更新,但可观察到的并不能反映出变化。因此,添加按钮未启用。

我错过了什么?我该怎么修?

谢谢。

当您填充url字段时,您需要触发更改事件来更新可观察项。所以,你可以做:

$("#url").val('/pages/' + id).change(); 

另一个更符合淘汰精神的选择是在你的选择上使用绑定。在这种情况下,您可能希望用该值填充可观察项,然后使用手动订阅将格式化的值默认输入到输入字段中。

this.itemUrl = ko.observable();
this.selectedUrl = ko.observable();
this.selectedUrl.subscribe(function(newValue) {
    if (newValue) {
        this.itemUrl("/pages/" + newValue);                
    }
}, this);

然后,将您的选择绑定到selectedUrl:

    <select id="pagedList" data-bind="value: selectedUrl">
        <option value=""><option>
        <option value="test">Test</option>
    </select>

以下是一个示例:http://jsfiddle.net/rniemeyer/HcRqn/21/

如果你的选项的"值"是url,你也可以取消额外的可观察和手动订阅。

在您的代码中,当选择字段时,我看不到实际启用按钮的位置。所以我可能会错过一些东西,但只要启用更改按钮即可。如下所示:

function LoadMenu() {
    $("#pagedList").change(function () {
        var id = $(this).val();
        $("#url").val('/pages/' + id);
        // remove the disabled attribute here
        $('button.space').removeAttr('disabled');
    });
}