【问题标题】:Not able to get value from select list in change event无法从更改事件中的选择列表中获取值
【发布时间】:2014-05-31 14:47:14
【问题描述】:

我有一组选择列表(下拉框),我在其中使用敲除事件绑定来触发更改事件。我有一个函数,当从下拉列表中选择不同的选项时,我试图获取该值,但是它总是返回我的 observablearray 中的第一个值。这是我正在做的事情-

这是我认为的选择列表:

  <table style="width: 100%">
     <tbody data-bind="foreach: LoanDetails">
 <tr style="border: none">
     <td>
          <select id="ddlLCLoans" tabindex="4" style="width: 120px" data-bind=" optionsCaption: 'Choose...', options: $data.FilteredLCLoans, 
optionsValue: 'LoanNum', optionsText: 'LoanNumCurrency', validationOptions: { insertMessages: false }, event: { change: $parent.LCLoanSelectionChanged }, value: $data.LCLoan, disable: $parent.disableButtons">
           </select>
      </td>
  </tr>

在我的 viewmodel 中,我有以下变量用于生成 observables:

         var buildRow = function (LCLoans) {
        var self = this;
        var obj = {               
            LCLoan: ko.observable(LCLoan).extend({ insertMessages: false, messagesOnModified: false, required: { onlyIf: validate, message: ' <BR /> LC Loans is Required' } }),

            FilteredABLoans: ko.observableArray(ABLoans())
        };

            // Add to object after obj is created so we can use that instance
            // using "this" to read the items DocStandby value
            obj.FilteredLCLoans = ko.computed(function () {

                return LCLoans().filter(function (item) {
                    return item.LoanSubType() === obj.DocStandby();
                });
            }, obj);

        obj.errors = ko.validation.group(obj);
        return obj;
    };

视图中的选择列表使用来自可观察的 filtersLCLoans 的字段,用于 optionsValue (LoanNum) 和 optionsText (LoanNumCurrency)。这是填充过滤LCLoans的模型:

         var ClientsModel = function (clientID, LoanNum, LoanSubType, LoanNumCurrency, CurrType) {
        var self = this;

        self.clientID = ko.observable(clientID);
        self.LoanNum = ko.observable(LoanNum);
        self.LoanSubType = ko.observable(LoanSubType);
        self.LoanNumCurrency = ko.observable(LoanNumCurrency);
        self.CurrType = ko.observable(CurrType);
    };

选择列表还引用了名为 LCLoanSelectionChanged 的​​函数。当用户从选择列表中选择不同的选项时,这就是我试图获取新选定值的地方。这是那个函数:

 var vm = {
        activate: activate,
        LCLoanSelectionChanged: function (row) {

            var newValue = row.FilteredLCLoans.LoanNum;
        }
  };

    return vm;

如何获取新选择的值?如果我放置一个断点并使用 jQuery (var newValue = $('#ddlLCLoans option:selected').val()) 我总是在我的视图中获得 ddlLCLoans 的第一个实例值。我知道上面的“var newValue = row.FilteredLCLoans.LoanNum”不起作用,只是不确定如何正确编码。

【问题讨论】:

  • 你能创建一个小提琴来展示你的问题吗?
  • 我可以试试,但是有很多部分。以上为节选。不确定我是否可以毫不费力地运行它。
  • 明白,但要重现这个问题,通常其他人必须为您构建一个小提琴(这对他们来说是很多努力)
  • 如果您的下拉列表的值绑定到一个可观察对象(LoanNum?),那么您可以简单地订阅对该可观察对象的更改。 Your subscribe callback will be called whenever a new option is selected.
  • 你能告诉我它会是什么样子吗?

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


【解决方案1】:

订阅肯定是要走的路。这是代码-

                    var currtype = '';
                    ko.utils.arrayForEach(LoanDetails(), function (itemLoan) {
                        itemLoan.LCLoan.subscribe(function (newLoan) {
                           alert(newLoan);
                        });
                 });

将其与我上面视图中的 html 进行比较,您可以看到这非常简化。

感谢帕特里克斯蒂尔!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 2022-11-24
    • 2023-03-24
    • 2012-09-26
    • 2017-12-22
    • 2017-11-01
    相关资源
    最近更新 更多