Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未触发Onchange事件_Javascript_Jquery_Html_Ruby On Rails - Fatal编程技术网

Javascript 未触发Onchange事件

Javascript 未触发Onchange事件,javascript,jquery,html,ruby-on-rails,Javascript,Jquery,Html,Ruby On Rails,嗨,我试图阻止用户在多个选择框上选择相同的值,但是我的javascript事件似乎不起作用 以下是我所拥有的: 优先考虑变更处理程序.js 代码在剩下的5个下拉列表中重复,将id更改为正确的id 以下是我试图将其应用到的视图/局部视图: _rand\u prompt\u step.html.erb 它使用正确的ID对其余5个下拉列表重复这样的操作 我已经将这一行应用于调用上述部分的视图的开头 <script src="/assets/prioritize_change_handler.js

嗨,我试图阻止用户在多个选择框上选择相同的值,但是我的javascript事件似乎不起作用

以下是我所拥有的:

优先考虑变更处理程序.js

代码在剩下的5个下拉列表中重复,将id更改为正确的id

以下是我试图将其应用到的视图/局部视图:

_rand\u prompt\u step.html.erb

它使用正确的ID对其余5个下拉列表重复这样的操作

我已经将这一行应用于调用上述部分的视图的开头

<script src="/assets/prioritize_change_handler.js" type="text/javascript"></script>
我甚至尝试使用html而不是rails来让它工作,但我似乎无法调用它


有什么建议吗?

您可以重构jquery函数,如下所示:

$(function() {
  var selects = $('#first, #second, #third');
  selects.on('change', function() {
    var $this = $(this),
      duplicateFound = false,
      val = $this.val();
    selects.not($this).each(function(i, sel) {
      if ($(sel).val() === $this.val() && this.value !== "") {
        $this.val($this.data('val'));
        return duplicateFound = true;
      }
    });
    if (duplicateFound) return;
    $this.data('val', val);
  });
});

希望这能有所帮助,

我会重构js,使其更具动态性


问题是您正在调用一个匿名函数

在标准JS中,这可能可以正常工作。。。但是当您使用Rails时,很可能没有调用它

因此,您需要使用以下内容:

#app/assets/javascripts/application.js
$(document).on("change", "select.add_class", function() {
   var parent_val = $(this).val();
   var others = $("select.add_class").not(this);

   $.each(others, function(i,v){
      if (parent_val == $(this).val() && this.value !== " ") {
         // do something here
      }
   }
});

这将从您的文档对象中删除,允许JS在每次加载时捕获请求。

这只是一个想法,但如果您阻止人们选择之前已选择的状态,将使人们很难改变主意,因为如果您愿意,他们必须在切换另一个状态之前取消选择一个状态。也许最好强调这两个数据都已被选中,并阻止提交表单,而不是阻止数据相同?相关问题
$(function() {
  var selects = $('#first, #second, #third');
  selects.on('change', function() {
    var $this = $(this),
      duplicateFound = false,
      val = $this.val();
    selects.not($this).each(function(i, sel) {
      if ($(sel).val() === $this.val() && this.value !== "") {
        $this.val($this.data('val'));
        return duplicateFound = true;
      }
    });
    if (duplicateFound) return;
    $this.data('val', val);
  });
});
$(function(){
  var $selects = $('.add-a-class-to-the-selects');

  $selects.on('change', function(){
    // get all your local variables
    var 
      $this     = $(this),
      val       = $this.val(),
      offset    = $this.offset(),
      $others = $selects.not(this);
    // find any duplicate options
    $others.each(function(){
      var $other   = $(this),
          otherVal = $other.val();
      if( otherVal && val === otherVal ){
        alert('selected value matches: ' + $other.attr('id') );
        $this.val('');
      }
    });
  });
});
#app/assets/javascripts/application.js
$(document).on("change", "select.add_class", function() {
   var parent_val = $(this).val();
   var others = $("select.add_class").not(this);

   $.each(others, function(i,v){
      if (parent_val == $(this).val() && this.value !== " ") {
         // do something here
      }
   }
});