2014-07-02 79 views
0

我有這個簡單的代碼:試圖讓響應點擊時件

$(document).ready(function(){ 
    $(".map-marker").click(function(){ 
     console.log("clicked"); 
     var latitude = $(this).data("data-latitude"); 
    });  
}); 

而且我有一個HTML元素:

<img class="map-marker" data-latitude="50.350520295349" data-longitude="50.350520295349" src="assets/img/markers/0.png"> 

但出於某種原因,這個簡單的代碼是不是加工。如果我把console.log放在點擊函數之外,如下:

$(document).ready(function(){ 
    console.log("clicked"); 
    $(".map-marker").click(function(){ 
     var latitude = $(this).data("data-latitude"); 
    });  
}); 

我在控制檯中得到所需的響應。所以,我知道a)jQuery已經加載,b)$(document).ready函數正在觸發。那麼,當元素被點擊時,什麼原因可能會導致我的原始代碼不能觸發?

+0

它在我的JSFiddle中工作... 它必須是你的代碼中的其他東西,你可以發佈更多的代碼嗎? http://jsfiddle.net/4uTwA/1/ – JOSEFtw

+0

@JOSEFtw我剛剛發現這與我使用AngularJS有關。 在ng-repeat裏面 - 當我把它放在外面時它就起作用了。我想我必須找到一種「角度」的方式來做到這一點。 – babbaggeii

+0

我認爲你應該看看其他答案並使用.on('click'...而不是:) – JOSEFtw

回答

2

你想:

var latitude = $(this).attr("data-latitude"); 

,或者你可能會想的:

var latitude = $(this).data("latitude"); 

如果點擊不firinig,然後用這個代替

$(document).on("click", ".map-marker", function(){ 


    }); 

的原因.on()是因爲我猜測你正在談論的元素是動態創建的(在文檔之後ment.ready())當第一個代碼被執行時。如果元素在document.ready()時沒有,那麼你必須使用.on()

這是我最好的猜測 - 因爲正如註釋所說,OP中的代碼是有效的工作代碼,除了當然在.data("data-latitude"),但被尋址以及

+1

謝謝,但無論那條線做什麼,console.log仍然應該激發 - 我的問題是點擊功能doesn'似乎在開火。 – babbaggeii

+0

更新的代碼 - 嘗試 –

+0

你需要的,如果地圖標記動態添加到DOM綁定處理程序的第二個方法。 – Barmar

0

它應該是:

$(this).data('latitude') 

或:

$(this).attr('data-latitude') 

當您使用data()方法,它會自動將data-前綴添加到名稱。

請注意,您應該使用.attr().data()一致,不具有相同屬性混合使用它們,因爲它第一次訪問它.data()緩存的屬性值。

+0

我覺得自己聰明 - 相同的答案,但速度更快,然後有人用116K代表 –

-1

$(this).attr("data-latitude");是你在找什麼。 Attr代表屬性,它是你如何獲得你在HTML中設置的屬性的值。

你確定你是包含你的JS文件還是你的函數在範圍內?

+0

他可以(應該?)也使用$(本)。數據(「緯度」),而不是 – JOSEFtw

+0

他是肯定的 - 作爲執行console.log()正在執行 –