【问题标题】:In knockout js, text in select is not changing when button click?在淘汰赛js中,单击按钮时选择中的文本没有改变?
【发布时间】:2013-08-19 08:37:50
【问题描述】:

在我的水疗中心,我正在使用敲除 js 将数据从 api 绑定到成功选择选项。

代码:

<select id="ddlClassificationPosition" name="" data-theme="c" data-bind="options: ClassificationPositionData, optionsValue: 'ClassificationPositionID', optionsText: function (i) { return i.Classification + ':' + i.Position },selectedOptions: SelectedItems, optionsCaption: 'Choose..'">
 <option value="0">
     Choose..
 </option>               
</select>

 self.SelectedItems= ko.observableArray([]);
  var vm = {
        ClassificationPositionData: ko.observableArray(positionData),
        ClassificationPositionID: ko.observable(),
        SelectedItems: ko.observableArray([])
    };

但在单击刷新按钮时,我想将所选选项更改为默认文本“选择..”。我在按钮单击中编写了下面给出的代码。

 <a data-role="button" data-transition="slide" href="#page3" data-icon="arrow-r"
              data-iconpos="right" data-bind="event: { click: btnAddContactLink }">
                 Sample
              </a>
self.btnAddContactLink = function () {
   self.SelectedItems.removeAll();
}

单击刷新按钮后,它不会更改文本。但是,如果我单击该下拉菜单,则它会显示“选择..”作为所选选项,如下所示。

我不知道我在哪里犯了错误。请朋友们帮帮我

【问题讨论】:

  • 请不要编辑您的问题的所有上下文和代码。这样做只会使其对未来的访问者毫无用处。

标签: jquery knockout.js single-page-application


【解决方案1】:

不要像这样使用 jQuery 来操作 DOM。尝试直接操作视图模型,让 Knockout 为您处理 UI 更新。您需要使用selectedOptions 绑定来执行此操作。

假设这个视图模型:

var vm = {
    ClassificationPositionData: ko.observableArray([i1, i2]),
    ClassificationPositionID: ko.observable(),
    SelectedItems: ko.observableArray([])
};

您可以将selectdata-bind 更改为以下内容:

<select id="ddlClassificationPosition" name="" data-theme="c" 
        data-bind="options: ClassificationPositionData, 
                   optionsValue: 'ClassificationPositionID', 
                   optionsText: function (i) { return i.Classification + ':' + i.Position }, 
                   selectedOptions: SelectedItems,
                   optionsCaption: 'Choose..'">
</select>

这会将所选项目绑定到您的视图模型中的可观察对象。然后使用以下方法刷新并重置为base选项:

vm.refresh = function() { vm.SelectedItems.removeAll(); };

this fiddle 中查看所有这些工作。

PS:如果您还具有 optionsCaption 的绑定,我认为您不需要显式的 option 元素。

【讨论】:

  • 您好 Jeroen,非常感谢您的回复。但你的编码对我不起作用。我不知道为什么。我按照你的更改了我的编码。我收到以下错误未捕获错误:无法解析绑定。消息:ReferenceError:SelectedItems 未定义;绑定值:options: ClassificationPositionData, optionsValue: 'ClassificationPositionID', optionsText: function (i) { return i.Classification + ':' + i.Position }, selectedOptions: SelectedItems, optionsCaption: 'Choose..'
  • 您是否在视图模型上创建了一个 SelectedItems 可观察对象作为兄弟属性(对于 ClassificationPositionData 等人)?如果您使用视图模型的相关部分扩展您的问题,也许会有所帮助。
  • 是的。我像这样创建 self.SelectedItems=ko.observableArray([]);。但它不适合我。如果我犯了任何错误,请告诉我。如果可能,请为我更新代码。因为我是淘汰js的初学者。
  • 嗯,不要认为是 me 必须更新代码(我的小提琴正在工作),而是 you 应该在你的帮助我们重现您的问题的问题;-)
  • 对不起朋友。我按照你的改变了我的编码。请看上面并告诉我哪里出错了
【解决方案2】:

只需将您的 &lt;select&gt; 绑定到可观察变量并将其值设置为 null 即可取消选择任何项目。

<select id="ddlClassificationPosition" name="" data-theme="c" data-bind="options: ClassificationPositionData, value: selectedPosition, optionsValue: 'ClassificationPositionID', optionsText: function (i) { return i.Classification + ':' + i.Position }, optionsCaption: 'Choose..'"></select>

<button data-bind="click: function(){ $root.selectedPosition(null); }">Reset</button>

工作小提琴:http://jsfiddle.net/Wuj98/

【讨论】:

  • 嗨 f_marinez,感谢您的回复..我想在该按钮单击中清除几个文本框值。但您的代码仅用于选择中的修复文本选项。你能帮我重写代码吗?
  • @Giri,你能展示你完整的视图模型和文本框的数据绑定吗?
  • texboxes 啊??我正在寻找按钮单击时将“选择..”文本设置为选定文本的解决方案
  • @Giri,“我想在该按钮单击中清除几个文本框值。但您的代码仅用于修复选择中的文本选项。”
  • 对不起,朋友。是的,我有三个文本框和一个选择选项。在刷新按钮时,我想清除文本框值并将选择选项文本设为“选择..”.. 所以请为我的问题提供解决方案
【解决方案3】:

changeDefaultText 用所选值替换默认文本。

JS

var vm = {
    selected :  ko.observable(), 
    items : ['a', 'b', 'c'],
    defaultText:  ko.observable('Default text'),
    changeDefaultText : function(){
        vm.defaultText(vm.selected());
    }
};

ko.applyBindings(vm);

查看

<select  data-bind="options: items, optionsCaption: defaultText, value : selected"></select>

<button data-bind="click : changeDefaultText">ChangeDefaultText</button>

See fiddle

希望对你有帮助。

【讨论】:

  • 嗨 Damien,感谢您的回复,但您的代码无法正常工作。请检查并为我重新编写。
  • 你能解释一下什么不起作用吗?你在期待什么?因为当我单击按钮时,默认文本会发生变化。
  • 是的。它改变了。但它没有将该文本显示为选定文本。我想将该文本显示为选定的文本。请帮帮我
  • 所以你想改变值而不是默认文本。
  • No no... 用户在该下拉列表中选择选项后,单击刷新按钮,然后它将显示选定的文本为“选择..”。您的代码正在更改文本,但未将文本显示为选定的文本。请朋友们帮帮我
【解决方案4】:

单选按钮代码:

  <input id="radio1" name="rbtnShift" value="1" data-theme="c" type="radio">

在刷新按钮点击,请写如下:

  $("input[type='radio']").checkboxradio();
  $("input[name^='rbtnShift']").attr("checked", false).checkboxradio("refresh");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-17
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 2013-12-03
    • 1970-01-01
    • 2020-08-28
    相关资源
    最近更新 更多