Javascript 从url散列中获取元素ID并触发它的单击处理程序

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 ) {

我想获取一个基于url哈希的元素,然后点击该元素。我一定错过了什么,因为我得到了错误:

未捕获的TypeError:对象[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变量时,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();
});