2014-03-18 14 views
0

我想抓取基於網址哈希的元素,並點擊該元素。我必須失去了一些東西,因爲我得到的錯誤:從網址哈希獲取元素ID並激發它的點擊處理程序

Uncaught TypeError: Property '$' of object [object Object] is not a function

下面的代碼

jQuery(function($){ 

    function doUrl() { 

     var urlHash = window.location.hash; 
     if (urlHash != '') { 
      if ($(urlHash).length > 0) { 
       $(urlHash).trigger('click'); 
      } 
     } 

    } 

    doUrl(); 

}); 

}); // jquery 看起來這個錯誤源於urlHash,它不是一個合適的元素類型,可以輸入到$()。但控制檯告訴我,urlHash變量包含我期望的內容:「#someClickableElement」。

當我手動將'#spagepage'替換爲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

你能發佈整個JS代碼嗎? – Scimonster

+3

聽起來像它沒有任何關係的urlHash不工作。 – naomik

+1

我們需要查看所有代碼,到目前爲止所顯示的內容沒有任何問題。如果click()不起作用,您肯定會在其他地方發現錯誤,請檢查您的控制檯。 – Leng

回答

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(); 
}); 
+0

關於簡化的好思路,但是當元素不存在時會發生什麼? – JakeParis

+1

@Jake - 當元素不存在時,jQuery總是優雅地失敗,這就是爲什麼你不需要使用.length和whatnot進行測試的原因。它默認執行那些測試。 – Leng

0

我通過把調用函數doUrl()谷歌地圖初始化塊內解決了這個問題。點擊處理程序調用的函數是Google地圖對象的一部分,因此在Map初始化之前無法觸發。