默认情况下,在页面加载 - 淘汰赛中调用更改事件

时间:2017-09-06 05:58:28

标签: jquery asp.net-mvc knockout.js

我试图在用户使用ajax调用更改下拉选项时保存该值。这是我的下拉列表

<select data-bind="options: RefreshOptions, optionsText: 'Value', optionsValue: 'Key', value: RefreshSelectedValue,  event: { change: SaveRefreshValue }"></select>

我正在绑定下拉值。但问题是更改事件 SaveRefreshValue 函数默认调用(页面加载)。 我尝试使用 optionsCaption:'',它的工作正常。但它在下拉列表中添加了一个空值,这是不需要的。

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

如果RefreshSelectedValue只是一个没有值的ko.observable(),那么下拉列表中的第一项将是 SET 。这将导致您的更改事件触发。

也可以使用subscribe而不是更改KO中的下拉菜单。这是一个fiddle

更新:如果您坚持不添加optionCaption,那么我可以建议一个黑客攻击(它不是很漂亮,但可以完成工作):创建一个{{1}下拉列表被更改为全局变量的次数。然后,如果计数超过一个,请执行你的ajax:fiddle

counter

答案 1 :(得分:1)

如果您不想拥有标题并且最初不想要任何选择,请使用valueAllowUnset绑定选项:

<select data-bind="
    options: RefreshOptions, 
    optionsText: 'Value', 
    optionsValue: 'Key', 
    value: RefreshSelectedValue, 
    valueAllowUnset: true"></select>