从外部触发淘汰赛

奥勒·阿尔伯斯

我在html表单中有以下Select-Element:

<select multiple="multiple" data-bind="options: candidateList, optionsValue: 'id', optionsText: 'title', optionsAfterRender: setOptionTitle, selectedOptions: selectedCandidates, optionsAfterRender: setOptionTitle, event: { dblclick: addSelectedCandidate, change: candidateChanged }, enable: enabled()">
<option title="first" value="1">first</option>
<option title="second" value="2">second</option>
<option title="third" value="3">third</option>
</select>

现在,我使用jQuery-Methods设置“ Option SELECTED”-值来选择该Select的多个元素。

如您所见,该选择具有数据绑定,该数据绑定来自敲除。该敲除代码在其他人提供的另一个JavaScript文件中。我们不能在那里真正更改内容。而且我们的代码不是淘汰赛,而是简单的jQuery代码。

现在我的问题是,该选择上有验证。当我手动单击某个元素时,这将启用另一个Button等。

但是,当我尝试通过代码执行此操作时,什么也没有发生。我试图插入“选择”, ,;$(option).trigger('click')$(option).click()$(option).trigger('change')$(option).change()

有什么方法可以迫使淘汰赛“识别”我们以编程方式更改的内容?

耶罗恩

使用val然后trigger('change')它会起作用。这是一个演示:

ko.applyBindings({
  candidateList: [{ id: 1, title: "first" }, { id: 2, title: "second" }, { id: 3, title: "third" }],
  setOptionTitle: function() { },
  selectedCandidates: ko.observableArray(),
  addSelectedCandidate: function() { },
  candidateChanged: function() { },
  enabled: ko.observable(true)
});

function getRandomVal() { return (Math.floor(Math.random() * (3 - 1)) + 1).toString(); }

window.setInterval(function() {
  var vals = [];
  if (Math.random() > 0.75) { vals.push(getRandomVal()); }
  if (Math.random() > 0.75) { vals.push(getRandomVal()); }
  if (Math.random() > 0.75) { vals.push(getRandomVal()); }
  $("select").val(vals).trigger("change");
}, 1000);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min.js"></script>

<select multiple="multiple" data-bind="options: candidateList, optionsValue: 'id', optionsText: 'title', optionsAfterRender: setOptionTitle, selectedOptions: selectedCandidates, optionsAfterRender: setOptionTitle, event: { dblclick: addSelectedCandidate, change: candidateChanged }, enable: enabled()">
<option title="first" value="1">first</option>
<option title="second" value="2">second</option>
<option title="third" value="3">third</option>
</select>

<hr>
Selected candidates: <code data-bind="text: ko.toJSON($root.selectedCandidates, null, 2)"></code>

PS。如果您无法更改代码实际应该更改的地方,则可能主要是政治问题像这样混合使用jQuery和KO在短期内会伤害您,从长远来看严重伤害您

PPS。所发布的KO代码中有一些奇怪的东西(至少没有上下文)。首先,它具有option,但是应该生成它们其次,change侦听事件,但是通常选择预订或可写的计算将是更好的选择。第三,optionsAfterRender声明两次。最后,enabled执行值,如果它是可观察的,则是多余的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章