2015-09-26 91 views
0

你可以看看这个演示,让我知道为什么我不能创建一个动态输入名称选择器?我正在尝试的是基于Bootstrap Tab功能动态地传递选择器的名称。通过动态名称选择器不工作

var checkname; 
 

 
$('a[data-toggle="tab"]').on('shown.bs.tab', function(e) { 
 
    var target = $(e.target).attr("href") // activated tab 
 
    checkname = target.substring(1); 
 
}); 
 

 

 
$("input:checkbox[name=" + checkname + "]").on('change', function() { 
 
    if ($(this).is(':checked')) { 
 
    alert('Checked'); 
 
    } else { 
 
    alert('Un Checked'); 
 
    } 
 
});
@import 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css';
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> 
 
<div class="container"> 
 
    <div class="col-md-3"> 
 
    <ul id="myTab" class="nav nav-tabs"> 
 
     <li class="active"><a href="#home" data-toggle="tab">Home</a> 
 
     </li> 
 
     <li class=""><a href="#profile" data-toggle="tab">Profile</a> 
 
     </li> 
 
    </ul> 
 
    <div id="myTabContent" class="tab-content"> 
 
     <div class="tab-pane fade active in" id="home"> 
 
     <input type="checkbox" name="home" value="unit-in-group">Home 
 
     </div> 
 
     <div class="tab-pane fade" id="profile"> 
 
     <input type="checkbox" name="profile" value="unit-in-group">Profile 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div>

+2

通过当变量用于它的时间'undefined',移动结合事件的代码在年底'show.bs.modal' – Tushar

+0

$('一个[数据肘节=‘标签’ ]')。('shown.bs.tab',函数(e){..... shown.bs.tab是自定义事件? – brk

+0

@Tushar,感谢您的评论但不确定您的意思是什么? – Suffii

回答

1

为了延长@图莎尔的评论:

的时候,当变量用于这是undefined,在show.bs.modal

年底移动绑定事件的代码

问题是事件show.bs.tab是calle d asynchrone,因此当您尝试在$("input:checkbox[name="+checkname+"]")中访问该变量时,变量将不会被设置。您可以执行的操作确保您在show.bs.modal事件触发时首先绑定change事件。

$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { 
    // Activated tab 
    var target = $(e.target).attr("href"); 
    // When we have the target we can bind the change event - not before! 
    bindChange(target.slice(1)); 
}); 

function bindChange(checkname) { 

    $("input:checkbox[name="+checkname+"]").on('change', function(){ 
    if ($(this).is(':checked')) { 
     alert('Checked'); 
    } 
    else { 
     alert('Un Checked'); 
    } 
    }); 
} 
+0

谢谢dev-null这是工作,但我有一些问题?首先,@Tushar只是评论'在show.bs.modal结束时移动绑定事件的代码',但你正在做一个函数'bindChange()'是这些都是一样的吗?你能解释一下在你的代码中究竟发生了什么 – Suffii

+0

@Suffii是的,它是一样的,我只是把代码结构化成不同的部分,假设你想要双在另一个时间发现事件,那么你可以简单地调用'bindChange('qwerty')'。我还编辑了解释执行流程的答案。 – andlrc