这是因为在完成 ajax 调用后会再次添加元素,但不会再次触发 document.ready。可以通过事件委托来解决。
$(document).ready(function () {
//--------------- Info Box --------------------
$(document).on('mouseup', '.CityItem', function (e) {
if ( e.which === 3 ) {
$('.CityItem').children('.CompanyList').hide();
$(this).children('.CompanyList').toggle();
$(this).children('.CompanyList').css('top', e.pageY - 300 );
$(this).children('.CompanyList').css('left', e.pageX - 175 );
}
e.preventDefault();
});
$(document).on('hover', '.CityItem',function () {
$(this).children('.CompanyList').hide();
});
});
委托事件的优点是它们可以处理来自以后添加到文档的后代元素的事件。通过选择一个在附加委托事件处理程序时保证存在的元素,您可以使用委托事件来避免频繁附加和删除事件处理程序的需要,jQuery Api
当 ajax 请求结束时,您还可以使用Sys.WebForms.PageRequestManager endRequest Event将事件重新绑定到添加的元素。
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler)
function EndRequestHandler(sender, args)
{
if (args.get_error() != undefined)
{
bindEvents();
}
}
function bindEvents()
{
//--------------- Info Box --------------------
$('.CityItem').mouseup(function (e) {
if ( e.which === 3 ) {
$('.CityItem').children('.CompanyList').hide();
$(this).children('.CompanyList').toggle();
$(this).children('.CompanyList').css('top', e.pageY - 300 );
$(this).children('.CompanyList').css('left', e.pageX - 175 );
}
e.preventDefault();
});
$('.CityItem').hover( function () {
$(this).children('.CompanyList').hide();
});
}
$(document).ready(function () {
bindEvents();
});