我想基于url哈希获取一个元素,并触发该元素的单击。我必须遗漏一些东西,因为我收到了错误:
Uncaught TypeError:Property' $'对象[object Object]不是函数
这是代码
jQuery(function($){
function doUrl() {
var urlHash = window.location.hash;
if (urlHash != '') {
if ( $(urlHash).length > 0 ) {
$(urlHash).trigger('click');
}
}
}
doUrl();
});
}); // jquery
看来这个错误源于urlHash不是一个适当的元素类型,可以输入$()
。但是控制台告诉我urlHash变量保存了我期望它:"#someClickableElement"。
当我用'#somepageid'手动替换urlHash变量时,点击事件仍然不会像我期望的那样在页面加载时触发。所以只是为了澄清,这也不起作用:
$(function(){
$('#someClickableElement').click();
});
我无法确定我的问题所在。
对于那些想要查看整个代码的人来说,其中包含更多内容:
var map;
function initialize() {
var mapOptions = {
zoom: 17,
center: new google.maps.LatLng(xxx,xxx),
mapTypeId: google.maps.MapTypeId.ROADMAP,
panControl: false,
zoomControl: true,
zoomControlOptions: {
position: google.maps.ControlPosition.RIGHT_CENTER
},
scaleControl: false,
mapTypeControl: false,
streetViewControlOptions: {
position: google.maps.ControlPosition.RIGHT_CENTER
}
// navigationControl: true, // (this is the pan and zoom together)
};
map = new google.maps.Map(document.getElementById('map-area'), mapOptions);
}
// init map
google.maps.event.addDomListener(window, 'load', initialize);
function findMapItem(lat,lon) {
var buildingLoc = new google.maps.LatLng(lat,lon);
map.panTo( buildingLoc );
removeAllMarkers();
// add new marker
buildingMarker = new google.maps.Marker({
map: map,
position: buildingLoc,
clickable: true,
icon: pathToAssets + 'bobcatMarker2.png'
//title: ,
})
buildingMarkers.push(buildingMarker);
}
jQuery(function($){
$('.mapItemsControls a').click(function(){
if ( $(this).hasClass('layerOn') ) {
$(this).removeClass('layerOn');
} else {
$('.mapItemsControls a').not(this).removeClass('layerOn');
$(this).addClass('layerOn');
}
doHistory( $(this).attr('href') );
return false;
});
$('#mapNav .findMapItem').click(function(){
var lat = $(this).data('lat');
var lon = $(this).data('lon');
if (lat != '' && lon != '') {
findMapItem(lat,lon);
}
});
function doUrl() {
var urlHash = window.location.hash;
if ( jQuery(urlHash).length > 0 ) {
jQuery(urlHash).trigger('click');
}
}
doUrl();
});
答案 0 :(得分:0)
确保您的点击处理程序声明在doUrl()函数调用之前。
您还可以大大简化doUrl()函数。
Click here for a working fiddle.
jQuery(function($){
$('#test').click(function() {
alert('No problems.');
});
function doUrl() {
$(window.location.hash).trigger('click');
}
doUrl();
});
答案 1 :(得分:0)
我通过在Google Maps init块中调用函数doUrl()
解决了这个问题。点击处理程序调用的函数是google maps对象的一部分,因此在Map初始化之前无法触发。