jQuery body onChange具有多个元素和多个函数
jQuery body onChange with multiple elements and multiple functions
如何限制多个body onChange函数的执行,使其真正只在选择器抓取时运行?
$('body').on('change',$selectRadios,function(e){
// do something and stuff like
$btnNext.removeAttr('disabled');
console.log('I should only run if I change $setupRadios')
}
$('body').on('change',$selectCheckboxes,function(e){
// do something else and stuff without interfering with the first onChange-function like
$btnNext.attr('disabled',true);
console.log('I should not run if I change $setupRadios');
}
如果我这样做,如果我更改$selectRadios,btnNext将不会重新启用,但它将保持禁用状态(它实际上运行第二个功能,正如我在控制台中看到的,因为它记录了«如果我也更改$setupRadio,我不应该运行»)
更新:我必须使用来自主体的事件委派,而不是直接缓存的元素,因为$selectRadio和$selectCheckbox是通过更多的脚本动态添加到页面中的
更新2:$selectRadio和$selectcheckbox是通过以下方式添加的:
function addTeam() {
for(var i = 0; i < resultSetupCount; i++) {
$('.js-setup ul').append($('<li tabindex="0"><input class="js-setupRadio" type="radio" id="setup'+(i+1)+'" name="setup" value="setup'+(i+1)+'" data-setup0="'+resultSetupGoalie[i]+'" data-setup1="'+resultSetupAbwehr[i]+'" data-setup2="'+resultSetupVorne[]+'" data-trck="setup-'+resultSetupTrck+'-clicked" tabindex="-1" /><label for="setup'+(i+1)+'"><img alt="" src="'+resultSetupImg[i]+'" srcset="'+resultSetupImg[i]+' 1x, '+resultSetupImg2x[i]+' 2x" /><span>'+resultSetupName[i]+'</span></label></li>'));
}
}
->请参阅.js setupRadio
如果需要整理事件期间实际更改的内容,请使用event.target
。您应该能够用您的函数替换警报,并且它应该仅作为上下文中单击的元素工作。
摘录
$(function() {
var $inputs = $('input');
$('#set').on('change', $inputs, function(e) {
var changed = e.target;
$inputs.each(function(index, element) {
var ele = this.className;
if (this == changed) {
alert(ele+index+' has changed');
}
});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<fieldset id="set">
<input class="chk" type="checkbox">
<input class="chk" type="checkbox">
<input class="chk" type="checkbox">
<input class="chk" type="checkbox">
<input class="rad" type="radio" name="rad1">
<input class="rad" type="radio" name="rad1">
<input class="rad" type="radio" name="rad1">
<input class="rad" type="radio" name="rad2">
<input class="rad" type="radio" name="rad2">
<input class="rad" type="radio" name="rad2">
</fieldset>
我可以通过测试e.target是否具有来自$selectRadios或$selectCheckboxes的类来解决这个问题,并且只在true时运行函数的内容:
$(document).on('change',$setupRadios,function(e){
var $that = $(e.target);
if ($that.hasClass('js-setupRadio')){
// do something and stuff like
$btnNext.removeAttr('disabled');
console.log('I should only run if I change $setupRadios')
}
});
$('body').on('change',$selectCheckboxes,function(e){
var $that = $(e.target);
if ($that.hasClass('js-checkbox')){
// do something else and stuff without interfering with the first onChange-function like
$btnNext.attr('disabled',true);
console.log('I should not run if I change $setupRadios');
}
});
相关文章:
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 在函数中添加数组元素的数值
- 如何在DOM元素上按类型构建此函数
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 如何计算每个元素's的高度,并将这些值用作函数中的变量
- Rails/Javascript链接到用于切换多个元素的函数
- 如何在HTML元素上创建函数,而不是将元素作为参数传递
- jQuery在元素的上下文中运行函数
- 如何在模板聚合物中使用元素函数
- Append元素在运行两次函数后不显示
- 当元素可见时,jQuery滚动函数会触发一次
- 如何将一个函数附加到一个不存在的元素上
- 带有事件的触发元素函数
- 是否可以从另一个元素访问元素函数?聚合物1.0
- 单击的元素函数参数的值错误
- 为什么不在DOM元素函数上应用工作呢?
- 未定义的错误:创建带有返回HTML元素函数的对象
- node . js,节点.IO -使用"each"迭代元素函数停止服务器
- 将循环变量作为元素函数中的参数传递
- 动态添加的元素函数调用不工作