2014-10-11 61 views
0

我在代碼中遇到了一些問題,我嘗試在JavaScript中的InfoWindow內容中啓動一個函數,並且我不知道爲什麼,我很難做到這一點。我已經看了很多關於它在stackoverflow和其他地方的話題,應用到我見過的這些話題上,但是...InfoWindow內容中的onclick

注意:這是我整個代碼的一部分,這就是爲什麼「infobulle 「似乎沒有被宣佈。 以同樣的方式,「this.jsonActivity」和「mapView」在這部分代碼之前正確初始化。

這裏,參數中的「newActivity」是來自google maps API的標記,我試圖做的是在點擊它時在當前標記旁邊顯示InfoWindow。一切正常,整個文本正確顯示在InfoWindow中,但問題是我不能調用「alertMessage()」方法,當我點擊按鈕時,什麼都沒有發生......我真的不知道爲什麼! !

嗯,這裏是我的代碼,感謝您的幫助:)

google.maps.event.addListener(newActivity, "click", function() { 
    if(infobulle) 
     infobulle.close(); 

    var contenu = '<strong>' + this.jsonActivity.title + '</strong><br/>' + 
     this.jsonActivity.description + '<br/>' + 
     '<h3>Routing:</h3>' + 
     '<button onclick="alertMessage()">Click me</button>'; 

    infobulle = new google.maps.InfoWindow({ 
     content: contenu, 
     maxWidth: 120 
    }); 
    infobulle.open(mapView, this); 

    function alertMessage() { 
     alert("alertMessage"); 
    } 
}); 

編輯:

這是完美的,它的工作吧!

我已經嘗試了所有的解決方案,只有一個解決方案爲我工作,這是爲Dr.Molle聲明瞭全球功能的解決方案!

現在我把我已經嘗試了其他兩種解決方案:

google.maps.event.addListener(newActivity, "click", function() { 

    if(infobulle) 
     infobulle.close(); 

    var contenu = '<strong>' + this.jsonActivity.title + '</strong><br/>' + 
     this.jsonActivity.description + '<br/>' + 
     '<h3>Routing:</h3>' + 
     '<button id="myAlert">Click me</button>'; 

    infobulle = new google.maps.InfoWindow({ 
     content: contenu, 
     maxWidth: 120 
    }); 
    infobulle.open(mapView, this); 

    document.getElementById("myAlert").addEventListener(function() { 
     alert("something"); 
    }); 
}); 

對於由賈裏德·史密斯建議的解決方案。就像以前一樣,除了點擊按鈕時,所有東西都能正確顯示,沒有任何反應。

而對於亞歷山大提出瞭解決方案:

google.maps.event.addListener(newActivity, "click", function() { 

    if(infobulle) 
     infobulle.close(); 

    var contenu = '<strong>' + this.jsonActivity.title + '</strong><br/>' + 
     this.jsonActivity.description + '<br/>' + 
     '<h3>Routing:</h3>' + 
     '<button onclick="(function() { 
      alert(\"something\"); 
     })();">Click me</button>'; 

    infobulle = new google.maps.InfoWindow({ 
     content: contenu, 
     maxWidth: 120 
    }); 
    infobulle.open(mapView, this); 
}); 

這個時候,即使我應該單擊該按鈕不會顯示的元素...

那麼這兩個解決方案,也許我沒有正確地使用他們......所以如果你發現話要說,那就請便吧:)

EDIT(2): 好吧,現在我有一個其他的問題:如果我想把一個變種可以作爲函數的參數,我該如何做到這一點?只需輸入變量的名稱作爲參數不起作用。

我已經試過:

var contenu = '<strong>' + this.jsonActivity.title + '</strong><br/>' + 
    this.jsonActivity.description + '<br/>' + 
    '<h3>Routing:</h3>' + 
    '<button onclick="alertMessage(\'something\')">Click me</button>'; 
window.alertMessage = function(thing) { 
    alert(thing); 
}; 

這是工作,因爲我直接就把字符串作爲參數。

但如果我聲明:

var text = "something"; 

var contenu = '<strong>' + this.jsonActivity.title + '</strong><br/>' + 
    this.jsonActivity.description + '<br/>' + 
    '<h3>Routing:</h3>' + 
    '<button onclick="alertMessage(text)">Click me</button>'; 
window.alertMessage = function(thing) { 
    alert(thing); 
}; 

它不工作了,你知道如何解決這一問題?

回答

1

使函數訪問全球(目前是不是):

window.alertMessage=function() { 
    alert("alertMessage"); 
} 
-1

單擊時按鈕的上下文不同。所以按鈕不知道alertMessage函數是否存在。

嘗試使用匿名函數這樣

<button onclick="(function() { 
    alert('he'); 
})();">btn</button> 
+0

你不應該提倡宣佈在HTML中的JS功能。 – 2014-10-11 21:53:39

+0

它已經在html中聲明。 – Alex 2014-10-11 21:58:32

+0

我知道,但重點是幫助人們編寫更好的代碼,而不是在錯誤的方向上更有效地拖拽。 – 2014-10-11 22:01:19

0

而不是

"<button onclick='blah'>" 

你需要

"<button id='myAlertButton'>" 
在你的事件監聽回調

然後將信息窗口添加到DOM

document.getElementById('myAlertButton').addEventListener(function(){ 
    alert('Whatever'); 
});