我在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] 删除。
我来说两句