bootstrap 具有不同 shown.bs.collapse 事件的内部手风琴手风琴
bootstrap accordions with inner accordion with different shown.bs.collapse events
我有一个 bootstrap 手风琴,里面有一个手风琴。我遇到的问题是,当我点击内部手风琴时,外部手风琴绑定到的 'shown.bs.collapse' 事件被触发,但事实并非如此,我希望将内部面板绑定到它的如果可能的话,拥有 shown.bs.collapse 活动?
为了给你一个更好的主意,我有以下内容:-
$('#accordion').on('shown.bs.collapse', function (e) {
GetData(param1, param2);
})
GetData 是一个执行 ajax 调用并将内部手风琴附加到外部手风琴的函数。外部手风琴 ID 是#accordion。这工作正常,但是当我点击内部手风琴时,我给它一个 id #accordion2,上面的代码被再次调用。有人可以指出我正确的方向吗?
为了更好地理解手风琴的结构...我有一个 mvc 视图,其中包含以下内容:-
<div id="accordion" class="panel-group accordion" style="margin-top:20px">
</div>
然后我通过 javascript 函数动态构建其余部分。以下函数创建外部手风琴面板:
函数 GetGroups() {
$.ajax({
url: url,
dataType: "JSON",
contentType: "application/json; charset=utf-8",
success: function (data) {
$.each(data.data, function (index, item) {
var collapseContainer = 'collapse' + accordingIndexes[index];
var mkContainer = 'testContainer' + index;
$("#accordion").append('<div class="panel panel-default">\
<div class="panel-heading ">\
<h4 class="panel-title">\
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#' + collapseContainer + '">'
+ item.Name + ' - ' + item.Value +
'</a>\
</h4>\
</div>\
<div id="' + collapseContainer + '" class="panel-collapse collapse">\
<div id="' + mkContainer + '" class="panel-body border-red" data-source-id="' + item.Id + '">\
</div>\
</div>\
</div>');
});
}
});
}
在 'shown.bs.collapse' 中调用的 GetData 函数如下所示:
函数 GetData(testContainer) {
$.ajax({
url: url,
dataType: "JSON",
contentType: "application/json; charset=utf-8",
success: function (data) {
$.each(data.data, function (index, item) {
var collapseContainer = 'collapseInner' + accordingIndexes[index];
$("#" + testContainer).append('<div class="accordion-inner">\
<div class="accordion" id="accordion2">\
<div class="panel panel-default">\
<div class="panel-heading ">\
<h4 class="panel-title">\
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" data-source-id="' + item.Id + '" href="#' + collapseContainer + '">'
+ item.SourceName +
'</a>\
</h4>\
</div>\
<div id="' + collapseContainer + '" class="panel-collapse collapse">\
<div class="panel-body border-red">\
TEST\
</div>\
</div>\
</div>\
</div>\
</div>');
});
}
});
}
现在,当我尝试将#accordion2 绑定到它自己的事件时,它没有被触发,#accordion 中的一个被触发了。有什么想法吗?
$('#accordion2').on('shown.bs.collapse', function (e) {
console.log('test2');
})
由于您的 #accordion2
是动态添加的,因此您需要在此处调用 event delegation
,因此您可能需要使用以下代码:
$(document).on('shown.bs.collapse', '#accordion2', function (e) {
console.log('test2');
})
您可以将 $(document)
替换为 #accordion2
的某个最近的父级 element
,它存在于 page load
上并且不通过 ajax
[=19= 加载]
我有一个 bootstrap 手风琴,里面有一个手风琴。我遇到的问题是,当我点击内部手风琴时,外部手风琴绑定到的 'shown.bs.collapse' 事件被触发,但事实并非如此,我希望将内部面板绑定到它的如果可能的话,拥有 shown.bs.collapse 活动?
为了给你一个更好的主意,我有以下内容:-
$('#accordion').on('shown.bs.collapse', function (e) {
GetData(param1, param2);
})
GetData 是一个执行 ajax 调用并将内部手风琴附加到外部手风琴的函数。外部手风琴 ID 是#accordion。这工作正常,但是当我点击内部手风琴时,我给它一个 id #accordion2,上面的代码被再次调用。有人可以指出我正确的方向吗?
为了更好地理解手风琴的结构...我有一个 mvc 视图,其中包含以下内容:-
<div id="accordion" class="panel-group accordion" style="margin-top:20px">
</div>
然后我通过 javascript 函数动态构建其余部分。以下函数创建外部手风琴面板:
函数 GetGroups() {
$.ajax({
url: url,
dataType: "JSON",
contentType: "application/json; charset=utf-8",
success: function (data) {
$.each(data.data, function (index, item) {
var collapseContainer = 'collapse' + accordingIndexes[index];
var mkContainer = 'testContainer' + index;
$("#accordion").append('<div class="panel panel-default">\
<div class="panel-heading ">\
<h4 class="panel-title">\
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#' + collapseContainer + '">'
+ item.Name + ' - ' + item.Value +
'</a>\
</h4>\
</div>\
<div id="' + collapseContainer + '" class="panel-collapse collapse">\
<div id="' + mkContainer + '" class="panel-body border-red" data-source-id="' + item.Id + '">\
</div>\
</div>\
</div>');
});
}
});
}
在 'shown.bs.collapse' 中调用的 GetData 函数如下所示:
函数 GetData(testContainer) {
$.ajax({
url: url,
dataType: "JSON",
contentType: "application/json; charset=utf-8",
success: function (data) {
$.each(data.data, function (index, item) {
var collapseContainer = 'collapseInner' + accordingIndexes[index];
$("#" + testContainer).append('<div class="accordion-inner">\
<div class="accordion" id="accordion2">\
<div class="panel panel-default">\
<div class="panel-heading ">\
<h4 class="panel-title">\
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" data-source-id="' + item.Id + '" href="#' + collapseContainer + '">'
+ item.SourceName +
'</a>\
</h4>\
</div>\
<div id="' + collapseContainer + '" class="panel-collapse collapse">\
<div class="panel-body border-red">\
TEST\
</div>\
</div>\
</div>\
</div>\
</div>');
});
}
});
}
现在,当我尝试将#accordion2 绑定到它自己的事件时,它没有被触发,#accordion 中的一个被触发了。有什么想法吗?
$('#accordion2').on('shown.bs.collapse', function (e) {
console.log('test2');
})
由于您的 #accordion2
是动态添加的,因此您需要在此处调用 event delegation
,因此您可能需要使用以下代码:
$(document).on('shown.bs.collapse', '#accordion2', function (e) {
console.log('test2');
})
您可以将 $(document)
替换为 #accordion2
的某个最近的父级 element
,它存在于 page load
上并且不通过 ajax
[=19= 加载]