javascript - 将单击事件绑定(bind)到更改时的单个选择元素

标签 javascript jquery

我有多个 select 元素。当其中一个发生更改时,我只想使用 .btn 类将单击事件绑定(bind)到其下一个元素。这是我的代码:

<div class="whole">
    <ul>
        <li>
            first
            <select>
                <option></option>
                <option>reject</option>
                <option>hire</option>
            </select>
            <span class="btn">button</span>
        </li>
        <li>
            second
            <select>
                <option></option>
                <option>reject</option>
                <option>hire</option>
            </select>
            <span class="btn">button</span>
        </li>
        <li>
            third
            <select>
                <option></option>
                <option>reject</option>
                <option>hire</option>
            </select>
            <span class="btn">button</span>
        </li>
    </ul>
</div>
$('select').change(function() {
    var $changed = $(this);
    bindClick($changed);
});

var bindClick = function($el){
    $('.whole').on('click', $el.next(), function() {
        console.log('ciao');
    });
}

发生的情况是,在 select 更改后,每个 .btn 元素上都会绑定(bind)单击。我正在使用 jQuery。这是一个例子Fiddle

最佳答案

你的第二个参数on()被视为数据而不是选择器(选择器应该是字符串)

您正在使用 $el.next() 值的 on 版本被视为自定义数据(如果第二个参数是不是字符串)的事件,并且事件绑定(bind)到整个元素 - 不使用事件委托(delegate)

相反,您可以直接将处理程序绑定(bind)到 $el.next() 元素

$('select').change(function() {
  var $changed = $(this);
  bindClick($changed);
});

var bindClick = function($el) {
  $el.next().on('click', function() {
    snippet.log('change: ' + this.innerText);
  });

  $('.whole').on('click', $el.next(), function(e) {
    snippet.log('whole click:' + e.data.text());
    console.log('event', e)
    console.log('data', e.data)
  });
}
li {
  padding: 2em;
}
.btn {
  color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
<div class="whole">
  <ul>
    <li>first
      <select>
        <option></option>
        <option>reject</option>
        <option>hire</option>
      </select>
      <span class="btn">button 1</span>
    </li>
    <li>second
      <select>
        <option></option>
        <option>reject</option>
        <option>hire</option>
      </select>
      <span class="btn">button 2</span>
    </li>
    <li>third
      <select>
        <option></option>
        <option>reject</option>
        <option>hire</option>
      </select>
      <span class="btn">button 3</span>
    </li>
  </ul>
</div>

关于javascript - 将单击事件绑定(bind)到更改时的单个选择元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36448211/

相关文章:

javascript - 如何计算将 bool 表达式字符串括起来以求得所需结果的方法的数量

javascript - express js 4 - 如何在没有 app.configure 的情况下进行配置?

javascript - 消除 SVG 圆形元素上的别名

javascript - 使用 jQuery 按类名获取另一个元素中的元素

Javascript如何按索引合并数组并将其添加为属性?

javascript - jquery 加载时间和其中的 css 样式

javascript - 使用 jQuery 在移动设备上处理长按和双击事件的最佳方法是什么?

javascript - 未设置对象的数据成员值

javascript - jQuery DataTables 在每列中添加国家图标

jquery - 特定页面上的 drupal jQuery 1.4