2012-07-17 23 views
0

我有一個ViewDesk.js文件與JavaScript代碼。
View點擊處理程序不火(局部視圖)

<script src='@Url.Content("~/Scripts/KazBilet/Desk.js")' type="text/javascript"></script> 

Desk.js文件:

$(function() { 
    $('.wraper').load('/desk/getsessionscreen'); 
    toggleSession(); 
}); 

function toggleSession() { 
    alert('a'); 
    $('.sched a').on('click', function() { 
     var target = $(this); 
     $(this).toggleClass('selected'); 
     $('.sched a').not(target).each(function() { 
      $(this).removeClass('selected'); 
     }); 

     setStateForStepButton(); 
    }); 
} 

sched類和a標籤元素包含在其中裝入wraper div元素局部視圖。

問題在於click處理程序未觸發,但alert調用正常。如何解決它?
謝謝

+0

你可以發佈相關的'HTML(View)'代碼嗎?此外,在'click'處理程序中寫入的邏輯不正確。再次檢查你的代碼,如果你不知道我的意思,我會試着解釋:D。 – 2012-07-17 06:25:45

回答

2

您可以將您的點擊訂閱代碼放在外面。你甚至不需要等待DOM做好準備:

$('.sched').on('click', 'a', function() { 

還要注意:如果你想註冊熱鬧

$('.sched').on('click', 'a', function() { 
    var target = $(this); 
    $(this).toggleClass('selected'); 
    $('.sched a').not(target).each(function() { 
     $(this).removeClass('selected'); 
    }); 

    setStateForStepButton(); 
}); 


$(function() { 
    $('.wraper').load('/desk/getsessionscreen', function() { 
     toggleSession(); 
    }); 

}); 

function toggleSession() { 
    alert('a'); 
} 

還要注意,我使用了.on()方法正確超載如果您想在AJAX調用成功時調用toggleSession函數,則應使用.load方法的成功回調。

+0

謝謝,但我不明白,爲什麼我的代碼不起作用。我相信'on'方法使用動態創建的元素。是的,如果我在成功回調中調用'toggleSession',但是它也可以工作,但是如果我編寫直接的'click'處理函數:$('。sched a')。click(...)' – user1260827 2012-07-17 08:22:53

+0

您的代碼doesn'因爲你正在使用.on方法的重載,它不能像.live一樣工作。你還沒有把你的代碼放在AJAX成功處理程序中。所以目前你正在調用你的.on方法,AJAX還沒有完成。 – 2012-07-17 13:08:32

1

您需要在加載回調中調用toggleSession(),否則內容可能尚未加載,因此您的選擇器無法找到所需的元素。

$('.wraper').load('/desk/getsessionscreen', function() { 
    toggleSession(); 
}); 
+0

有一個'on'。我認爲這是用於這種情況 – user1260827 2012-07-17 06:54:37

0

的代碼似乎是正確的,但我曾在過去的一些問題on()。試試這個:

$(document).on('click', '.sched a', function() { 
    var target = $(this); 
    $(this).toggleClass('selected'); 
    $('.sched a').not(target).each(function() { 
     $(this).removeClass('selected'); 
    }); 

    setStateForStepButton(); 
}); 

另外,如果你正在嘗試設置類selected只對a點擊,我應該重寫代碼:

$(document).on('click', '.sched a', function() { 
    $('.sched a').removeClass('selected'); 
    $(this).addClass('selected'); 

    setStateForStepButton(); 
}); 

而作爲yan.kun說,調用在回調函數load()