从url hash获取元素ID并触发它的点击处理程序

时间:2014-03-18 19:01:17

标签: javascript jquery google-maps

我想基于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();

});

2 个答案:

答案 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初始化之前无法触发。