2015-09-26 46 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