根据彼此自动更改 2 个字段

Change 2 fields automatically based on each other

我正在使用 selectize.js 并且我有 2 个 select 字段:

$('#field1').selectize();
$('#field2').selectize();

我想在第一个字段更改(或 selected)时自动更改第二个的值;反之亦然,当 second 的值改变时改变 first 的值(或 selected)。

我正在使用 change 函数,像这样:

$("#field1").change(function () {
    var d = 'value-field2'
    var $select_field2 = $("#id_field2").selectize();
    var selectize_field2 = $select_field2[0].selectize;
    selectize_field2.setValue(d);
  });

  $("#field2").change(function () {
      var d = 'value-field1'
      var $select_field1 = $("#id_field1").selectize();
      var selectize_field1 = $select_field1[0].selectize;
      selectize_field1.setValue(d);
  });
  });

但是我在这里无限调用这两个函数,相互调用,因为它们相互改变。 我尝试使用 mouseover()click() 而不是 change() 但没有成功。

有什么想法吗?

您需要某种变量来识别 JavaScript 何时更改值而不是用户。你可以使用这样的东西:

var programmaticallyChanging = false;

$("#field1").change(function() {
    if (!programmaticallyChanging) {
        var d = 'value-field2'
        var $select_field2 = $("#id_field2").selectize();
        var selectize_field2 = $select_field2[0].selectize;
        programmaticallyChanging = true;
        selectize_field2.setValue(d);
        programmaticallyChanging = false;
    }
});

$("#field2").change(function() {
    if (!programmaticallyChanging) {
        var d = 'value-field1'
        var $select_field1 = $("#id_field1").selectize();
        var selectize_field1 = $select_field1[0].selectize;
        programmaticallyChanging = true;
        selectize_field1.setValue(d);
        programmaticallyChanging = false
    }
});

如果可能,将 var programmaticallyChanging = false;进入某个函数,这样它就不会暴露在 window.