如果li
有ul
,则将+
附加到最接近的li
这个类- .submenu
上。此 jQuery 函数可在同一页面上使用,但是当我尝试在ajax
加载的内容上使用此函数时,它将无法使用。 ajax
加载后如何正确使用?
$('.submenu').parent().each(function(){
if($(this).children("ul").length){
$(this).find('.submenu').html("+");
}
});
$(document).on("click", ".submenu", function(){
$(this).parent().find("ul").slideToggle("slow");
});
ul li{
list-style:none;
}
ul li ul{
display:none;
}
.cursorpointer{
cursor:pointer;
}
<ul>
<li>
<span class='submenu cursorpointer'></span>
<input type='radio' name='menu_id' value='sport'>Sports
<ul>
<li>
<input type='checkbox' name='subnav[]' value='fb'>Football
</li>
<li>
<input type='checkbox' name='subnav[]' value='vb'>Volleyball
</li>
</ul>
</li>
</ul>
<ul>
<li>
<span class='submenu cursorpointer'></span>
<input type='radio' name='menu_id' value='vehicle'>Vehicle
<ul>
<li>
<input type='checkbox' name='subnav[]' value='car'>Car
</li>
<li>
<input type='checkbox' name='subnav[]' value='cycle'>Cycle
</li>
</ul>
</li>
</ul>
答案 0 :(得分:1)
您将需要在ajax success
处理程序之后绑定事件。
执行此操作
success :function(data){
//your code what you do with data in success.
$('.submenu').parent().each(function(){
if($(this).children("ul").length){
$(this).find('.submenu').html("+");
}
});
$(document).off("click", ".submenu");
$(document).on("click", ".submenu", function(){
$(this).parent().find("ul").slideToggle("slow");
});
}
我假设您的DOM正在ajax
请求之后动态添加元素。这就是为什么我们也需要在此处(success
中)放置代码。
注意-不要忘记从.submenu
取消绑定点击事件,以防止注册多个事件。如您所见,我已经将.off
放到绑定事件之前进行取消绑定,这样一来,您一次只能注册一个事件,在您的情况下就是.click
事件。
答案 1 :(得分:1)
我可能会看看jQuery方法.ajaxComplete()
只要Ajax请求完成,jQuery就会触发ajaxComplete 事件。已在 .ajaxComplete()方法此时执行。
$( document ).ajaxComplete(function() {
$( ".log" ).text( "Triggered ajaxComplete handler." );
});
您的代码应如下所示:
var url = "http://....",
container = $(".AjaxContainer");
$.ajax({
url: url,
type : 'get',
complete : function( qXHR, textStatus ) {
if (textStatus === 'success') {
var data = qXHR.responseText
container.append(data);
$('.submenu').parent().each(function(){
if($(this).children("ul").length){
$(this).find('.submenu').html("+");
}
});
$(document).on("click", ".submenu", function(){
$(this).parent().find("ul").slideToggle("slow");
});
}
}
});
答案 2 :(得分:0)
请按如下所示尝试代码的第一部分:
$(document).find('.submenu').parent().each(function(){
if ($(this).children("ul").length) {
$(this).find('.submenu').html('+');
}
})