передать параметр встроенному href=’javascript: функция(» param «);

#javascript #jquery #html #leaflet

#javascript #jquery #HTML #брошюра

Вопрос:

Я пытаюсь встроить вызов функции javascript во всплывающую брошюру.

Я привязываю функцию showPopup() к каждому объекту, добавленному на карту. Идея в том, что когда пользователь нажимает на функцию, появляется ссылка href с надписью «Дополнительная информация …», которая должна открыть боковую панель.

Я пытаюсь передать код функций встроенному ‘javascript:getInfoPanelData (код функции здесь, скажем, КАНАЛ в качестве примера), чтобы узнать, с какой функцией я работаю. Однако запуск этого кода в отладчике Chrome приводит к

Неперехваченная ошибка ссылки: КАНАЛ не определен в :1:18.

Я также пытался добавить одинарные кавычки вокруг параметра, но это приводит к ошибке синтаксиса:

Неожиданный конец ввода (getInfoPanelData(«красный крест» в отладчике.

Я не уверен, что действительно могу сделать то, что мне нужно, и надеюсь, что кто-нибудь сможет указать на мою ошибку или возможные альтернативы.

 /*** Code that builds the popup  ***/
function showPopup(feature, urlString) {
	console.info("onEachFeature: "   feature.properties.Code   " | "   feature.properties.NAME);

	var pkVal = parseInt(feature.properties.ParkType, 10);
	
	var parkIcon = "nationalpark-40.png";
	
	var retHtml = "<div id='popup' class='popup'>"   
		"<h3 align='center'><img src='icons/"   parkIcon   "'/>"   feature.properties.NAME   "</h3>"   
        "<p>State: "   feature.properties.State   " | parkCode: "   feature.properties.Code   " | parkType: "   pkVal   "</p>"   
        "<p>Home Page: "   "<a href='"   urlString   "' target='_blank'>"   urlString   "</p>"   
        "<p><a href='javascript:getInfoPanelData("   feature.properties.Code   ");'> More Info...</a></p></div>";
	
	console.info("HTML: "   retHtml);
	
	return retHtml;
}  
 /*** Code that binds the popup to the feature  ***/
    /*  Create our NPS Layer  */
		var npsCPs = new L.GeoJSON.AJAX("data/NPS_4326_CPs.json", {
			pointToLayer: function(feature, latlng) {
				return L.marker(latlng, {
					icon: npsIcon
				});
			},
			onEachFeature: function(feature, layer) {
				var urlStr = "https://www.nps.gov/"   feature.properties.Code   "/index.htm";
				layer.bindPopup(showPopup(feature, urlStr));
			}
		});  

Ответ №1:

во фрагменте кода:

 <a href='javascript:getInfoPanelData("   feature.properties.Code   ");'>
  

вы действительно хотите процитировать feature.properties.Code . Однако вы не можете просто поместить туда отдельную кавычку, поскольку вы используете одинарные кавычки для href свойства. Вы также не можете просто заключить его в двойные кавычки, потому что вы используете двойные кавычки для своей строки. Вам нужно экранировать кавычки, например:

 <a href='javascript:getInfoPanelData(""   feature.properties.Code   "");'>
  

Комментарии:

1. Это сработало отлично. Я сделал предположение, что, попробовав ‘ в строке, было бы эквивалентно «. С благодарностью.

2. Приношу извинения. Готово! Надеюсь, это поможет и другим!