我对Jquery没有太多经验,并且在编写正确的回调函数时遇到问题,以便在通过ajax .load()调用加载html内容后执行单独的javascript函数。
以下代码加载外部html内容
$('#myID').find('a').on('click', function(){
e.preventDefault();
var $desc = $('#insert');
switch($(this).attr('href')) {
case 'content1.html' :
$desc.load('fragments/content1.html');
break;
case 'content2.html' :
$desc.load('fragments/content2.html');
break;
}
});
然后必须在上一个函数
加载的html上执行以下代码var panelWidth = 0;
var startPanel = 1;
window.panelWidth = $('.sp').width();
$('.panel_container .hiw_panel').each(function(index){
$(this).css({'width':window.panelWidth+'px','left':(index*window.panelWidth)});
$('.sp .panels').css('width',(index+1)*window.panelWidth+'px');
});
$('.switcher span').each(function(){
$(this).on('click', function(){
changePanels( $(this).index() );
});
});
function changePanels(newIndex){
var newPanelPosition = ( window.panelWidth * newIndex ) * -1;
$('.switcher span').removeClass('selected');
}
我删除了多余的内容,使其尽可能简洁。我需要知道的是如何在第一部分后执行第二部分。感谢您的帮助!
答案 0 :(得分:1)
$( '#myID' ).on( 'click', 'a', function( e ) {
e.preventDefault();
$( '#insert' ).load( $( this ).attr( 'href' ), function() {
var panelWidth = 0;
var startPanel = 1;
window.panelWidth = $( '.sp' ).width();
$( '.panel_container .hiw_panel' ).each( function( index ) {
$( this ).css({
'width': window.panelWidth,
'left': ( index * window.panelWidth )
});
$( '.sp .panels' ).css({
'width': ( index + 1 ) * window.panelWidth
});
});
$( '.switcher span' ).each( function() {
$( this ).bind( 'click', function() {
changePanels( $( this ).index() );
});
});
});
});
function changePanels( newIndex ) {
var newPanelPosition = ( window.panelWidth * newIndex ) * -1;
$( '.switcher span' ).removeClass( 'selected' );
}
它正在做的是绑定a
点击,然后加载href
标签的a
属性,然后执行回调函数,这是您的第2步代码。 (您可以阅读有关.load()here);
我认为changePanels
函数可能会遗漏某些内容,因为var
未被使用,但这很容易整理。
答案 1 :(得分:0)
我认为你在寻找:
$desc.load('fragments/content1.html', function(){
//cb code here
});
第二个参数是在请求完成时执行的回调函数。
答案 2 :(得分:0)
为您的函数命名 - 例如executeAfterLoad() - 并将其包含为argument of .load:
case 'content1.html' :
$desc.load('fragments/content1.html',executeAfterLoad);
break;
case 'content2.html' :
$desc.load('fragments/content2.html',executeAfterLoad);
break;