为什么 'this' 在我的 Meteor 事件中没有像我预期的那样工作?

Why does 'this' not work as I expect in my Meteor event?

在我的 Meteor 应用程序中,我有这个 HTML:

<select class="trabajar d1s1j1" id="d1s1w1" name="d1s1w1" disabled>
  <option value="nothing">select someone</option>
  {{#each workers}}
    <option value={{w_emailaddr}}>{{w_firstname}} {{w_middlename}} {{w_lastname}} {{w_namesuffix}}</option>
  {{/each}}
</select>

...还有这个 jQuery:

Template.tblScheduler.events({
  'change #date1Shift1JobLoc1Count': function(event) {
    var enableCount = $('#date1Shift1JobLoc1Count').val();
    $('.d1s1j1').attr('disabled', 'disabled').slice(0, enableCount ).removeAttr('disabled');
  }
});

我第一次尝试使用:

var enableCount = $(this).val();

而不是:

var enableCount = $('#date1Shift1JobLoc1Count').val();

...但它不起作用;然而,"this" 在像这样的 jsfiddle 测试用例中工作得很好:

$('#abler').click(function () {
    var enableCount = 5;
    $('.d1s1j1').attr('disabled', 'disabled').slice(0, enableCount).removeAttr('disabled');
});

那么是什么给了-这不是这个,还是这是什么?

在 Meteor 中,事件处理程序中的 this 变量指的是元素出现的数据上下文。在您的情况下,元素位于 {{#each}} handlebars helper 中,因此 this 变量将引用 workers 数组的单个元素。

如果您想使用 jQuery 访问事件发生的元素,您可以只使用:

$(event.currentTarget).val();

如果您想获取当前目标数据,您的事件应该如下所示。

Template.tblScheduler.events({
  'change #date1Shift1JobLoc1Count': function(event) {
     var enableCount = $(event.currentTarget).val();
   }
});