Selectize.js getAdjacentOption()如何工作?

时间:2016-07-17 15:42:10

标签: javascript jquery selectize.js

我一直在使用selectize.js,但我对getAdjacentValue()的使用感到有些困惑。

在API中找到:

  

getAdjacentOption(value,direction)`检索相对于当前突出显示的选项的上一个或下一个选项的jQuery元素。 “direction”参数应为1表示“next”或-1表示“previous”。

最小的工作示例,jsFiddle

<select id='car' name='car'>
  <option value='1'>Mercedes</option>
  <option value='2' selected>BMW</option>
  <option value='3'>Volvo</option>
</select>

和.js

$('select').selectize();
var obj = $('select')[0].selectize;

但是如何获得当前所选项目的下一个和上一个值? 我不知道如何实现API帮助。

2 个答案:

答案 0 :(得分:2)

API文档不清楚调用value时假设getAdjacentOption(value, direction)参数是什么。

如果您在selectize.js的来源中查找getAdjacentOption,您会找到

getAdjacentOption: function($option, direction) {
    var $options = this.$dropdown.find('[data-selectable]');
    var index    = $options.index($option) + direction;

    return index >= 0 && index < $options.length ? $options.eq(index) : $();
},

这告诉我们getAdjacentOption使用jQuery .index()方法,该方法接受选择器或元素。

因此调用obj.getAdjacentOption(2,1)无法给出预期的结果,因为您将int作为第一个参数传入函数。

但是调用它obj.getAdjacentOption("2",1)也不会有任何帮助,即使"2"可能是您当前所选选项的值。

在当前所选元素中进行长篇短篇传递。

这是一个例子

&#13;
&#13;
$(document).ready(function() {
  var $select = $('select').selectize();
  var obj = $select[0].selectize;
  obj.refreshOptions(false);
  
  var crnt = obj.getOption(obj.getValue());

  console.log("Prev option is:",
              obj.getAdjacentOption(crnt,-1).text(),
              "with a value of",
              obj.getAdjacentOption(crnt,-1).data("value"));  
  
  console.log("Next option is:",
              obj.getAdjacentOption(crnt,1).text(),
              "with a value of",
              obj.getAdjacentOption(crnt,1).data("value"));

});
&#13;
<link href="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.12.2/css/selectize.default.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.12.2/js/standalone/selectize.js"></script>

<select id='car' name='car'>
  <option value='1'>Mercedes</option>
  <option value='2' selected>BMW</option>
  <option value='3'>Volvo</option>
</select>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

为了改进DavidDomain所说的内容,我有一个按钮可以转到select中的下一个值,所以我这样做了:

$('#btnNext').click(function(){
    var $select = $('#ddlClients').selectize();
    var obj = $select[0].selectize;
    obj.refreshOptions(false);

    var crnt = obj.getOption(obj.getValue());
    var next = obj.getAdjacentOption(crnt, 1).data("value");
    obj.setValue(next); //here is where the value is setted as selected
});

这样,当我点击“下一步”按钮时,下拉菜单中的下一项设置为已选中。