Javascript 从url散列中获取元素ID并触发它的单击处理程序
我想获取一个基于url哈希的元素,然后点击该元素。我一定错过了什么,因为我得到了错误: 未捕获的TypeError:对象[object]的属性“$”不是函数 这是密码Javascript 从url散列中获取元素ID并触发它的单击处理程序,javascript,jquery,google-maps,Javascript,Jquery,Google Maps,我想获取一个基于url哈希的元素,然后点击该元素。我一定错过了什么,因为我得到了错误: 未捕获的TypeError:对象[object]的属性“$”不是函数 这是密码 jQuery(function($){ function doUrl() { var urlHash = window.location.hash; if (urlHash != '') { if ( $(urlHash).length > 0 ) {
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变量时,click事件仍然不会像我预期的那样在页面加载时触发。因此,澄清一下,这也不起作用:
$(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();
});
确保单击处理程序声明在doUrl函数调用之前 您还可以大大简化doUrl函数
我通过在GoogleMapsInit块中调用doUrl函数解决了这个问题。单击处理程序调用的函数是GoogleMaps对象的一部分,因此在地图初始化之前无法启动 你能发布完整的JS代码吗?听起来好像这与urlHash不起作用无关。我们需要查看你的所有代码,到目前为止你显示的代码没有任何问题。如果单击不起作用,您肯定会在其他地方出错,请检查您的控制台。@Leng,控制台列出没有错误。@JakeParis,在这个网站上有4000多名代表,我想您现在已经知道如何发布完整的问题了。简化方面考虑得好,但是当元素不存在时会发生什么呢?@Jake-jQuery总是在元素不存在时优雅地失败,这就是为什么您不需要使用.length之类的测试。默认情况下,它执行这些测试。
jQuery(function($){
$('#test').click(function() {
alert('No problems.');
});
function doUrl() {
$(window.location.hash).trigger('click');
}
doUrl();
});