data-binding - knockout 将文本标签绑定(bind)到下拉值选定的选项文本

标签 data-binding drop-down-menu knockout.js

是否有一种简单的方法可以绑定(bind) div 的文本框以根据同一页面上下拉列表中所选选项的文本值进行更改?

<div data-bind="text: dropdownValue"></div>
<select>
  <option value="1">Value1</option>
  <option value="2">Value2</option>
</select>

请注意,我不想使用 javascript 将值放入 select 元素中。我想直接从 HTML 绑定(bind)到值。我还可以包含 jQuery 以使其工作。

最佳答案

我在昨天拼凑的东西中寻找类似的功能但找不到它,所以我最终只是更改了我在值属性中存储的内容。有时这是最简单的解决方案。

这是使用 jQuery 解决问题的一种快速而丑陋的解决方案:

HTML

<div data-bind="text: dropdownText"></div>
<select data-bind="value: dropdownValue" id="dropdown">
  <option value="1">Value1</option>
  <option value="2">Value2</option>
</select>

JS
function ViewModel() {
    var self = this;
    this.dropdownValue = ko.observable();
    this.dropdownText = ko.computed(function() {
        return $("#dropdown option[value='" + self.dropdownValue() + "']").text();
    });
};

ko.applyBindings(new ViewModel());

实时示例:http://jsfiddle.net/5PkBF/

如果您希望在多个地方执行此操作,最好编写自定义绑定(bind),例如:

HTML
<div data-bind="text: dropdownValue"></div>
<select data-bind="selectedText: dropdownValue">
  <option value="1">Value1</option>
  <option value="2">Value2</option>
</select>

JS
ko.bindingHandlers.selectedText = {
    init: function(element, valueAccessor) {
        var value = valueAccessor();
        value($("option:selected", element).text());

        $(element).change(function() {
            value($("option:selected", this).text());
        });
    },
    update: function(element, valueAccessor) {
        var value = ko.utils.unwrapObservable(valueAccessor());
        $("option", element).filter(function(i, el) { return $(el).text() === value; }).prop("selected", "selected");
    }
};

function ViewModel() {
    this.dropdownValue = ko.observable();
};

ko.applyBindings(new ViewModel());

实时示例:http://jsfiddle.net/5PkBF/1/

关于data-binding - knockout 将文本标签绑定(bind)到下拉值选定的选项文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11166504/

相关文章:

jquery - 如何使 jQuery 下拉列表隐藏起来,直到在 IE6 中正确构建为止?

javascript - 如何修复这个 JQuery 下拉菜单?

android - 操作栏微调器定制

javascript - 将数据绑定(bind)到表格单元格上的模态单击

javascript - 在 KnockoutJS 中将数据传递给可观察对象时出现问题

c# - InvalidOperationException - TwoWay 或 OneWayToSource 绑定(bind)无法对只读属性起作用

android - 如何从 Android 中的数据绑定(bind)访问 Kotlin Lambda 函数

javascript - 如何在 Knockout.js 中模型和 View 之间转换数据?

angular - 将值传递给子组件 Angular 7

javascript - KnockoutJS observableArray : group data in foreach