在循环中将不同的变量值传递给事件处理程序

时间:2018-08-18 17:59:43

标签: javascript jquery onclick click apply

伙计们,我只是一个初学者,我不确定要如何解决我提出的问题。 我正在研究一个小插件,它可以重新设置所有HTML 输入的样式。我遇到的问题是每页下拉列表的多个实例,无论我在哪个<\ select>上单击最后一个<\ select>都会做出反应(显示下拉菜单)。

$(function () { // Document ready 
    test(document.getElementsByClassName("js_select"));
});


function test(selects) {
    var i = 0
    var l = selects.length;

    for (i; i < l; i++) {
        var thisSelect = selects[i];
        var xVariable = i * 10;

        $(thisSelect).click(function () {
            onDivClick.apply(this, [xVariable]);
        });
    }
    function onDivClick(variable) {
        console.log(variable);
    }
}

因此,在这里,我做了一个小例子来复制我的代码并显示正在发生的事情。我确实知道,在循环的每次迭代中,“ xVariable” 的值都会发生变化,并且每个“选择”的click事件仅会拾取“ xVariable”的最后一个值

如何进行调整,以便当我单击第一个时,在控制台中显示“ 0”,下一个选择显示“ 10”,依此类推...?

是否有一种无需对象注释即可解决此问题的方法?

谢谢

2 个答案:

答案 0 :(得分:0)

您可以使用each遍历选择,然后像这样绑定click事件:

(function () {
	$(".js_select").each(function(idx) {
  	$(this).on("click", function() {
    	console.log(idx * 10);
    });
  });
})();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="" id="" class="js_select">
  <option value="">-- Select a Value --</option>
  <option value="0">test</option>
</select>
<br>
<select name="" id="" class="js_select">
  <option value="">-- Select a Value --</option>
  <option value="0">test</option>
</select>
<br>
<select name="" id="" class="js_select">
  <option value="">-- Select a Value --</option>
  <option value="0">test</option>
</select>

我添加了一个选择示例列表,以使其更容易理解它们的工作原理。

答案 1 :(得分:0)

或者没有糟糕的丑陋jQuery

public static void write(OutputStream out, ArrayList<byte[]> buffer) throws IOException {
        for (byte[] packet: buffer) {
            out.write(packet);
        }
    }
// You could also use querySelectorAll
let selects = document.getElementsByClassName('js_select');

// Make sure there are selects
if(selects) {
  for(let i = 0; i < selects.length; i++) {
    let select = selects[i];
    
    select.addEventListener('click', function() {
      console.log(i * 10);
    });
  }
}

相关问题