2017-05-11 49 views
1

我能夠通過以下的解決方案張貼在這裏編輯一個以GeoJSON屬性單張彈出創建輸入字段:追加前的字符串的HTML元素

Edit feature attributes in leaflet

我想加一個常數字符串在彈出窗口中,以便彈出窗口讀取類似於'在此編輯數據:[用可編輯數據輸入]'

當我嘗試執行此操作時,輸入框失敗並返回字符串'[object HTMLInputElement]'代替。

如何避免這種情況?

var input = L.DomUtil.create('input', 'my-input'); 

input.value = feature.properties.datatoedit; 
L.DomEvent.addListener(input, 'change', function() { 
    feature.properties.datatoedit = input.value; 
}); 

var popupcontent = "<b>Edit Data Here: </b><br>" + input; 

layer.bindPopup(popupcontent); 
+0

我要發表評論,而不是一個答案,因爲我不熟悉的傳單。你創建'input'作爲一個DOM元素。請注意,這不是一個字符串,所以試圖連接一個字符串與DOM元素。因此你的結果。將您的字符串創建爲DOM元素並使用它。也許包裝你的元素和額外的DOM容器就像一個'div' –

回答

1

歡迎來到SO!

你必須認識到,"<b>Edit Data Here: </b><br>" + input試圖連接一個HTML元素

當這樣做時,JS引擎會嘗試將input轉換爲一個字符串,該字符串會呈現您的'[object HTMLInputElement]'字符串。

相反,您應該將"<b>Edit Data Here: </b><br>"部分轉換爲HTML元素(也可以是片段),以便您可以將它插入input並將它們作爲HTML節點提供給彈出窗口內容。

// Create an HTML Element container for both your string and input. 
var popupContent = document.createElement('div'); 

// Fill it first with your raw HTML code. 
// It will automatically be parsed and converted as HTML nodes. 
popupContent.innerHTML = "<b>Edit Data Here: </b><br>"; 

// Now you can append your `input` which is already an HTML Element. 
popupContent.appendChild(input); 

layer.bindPopup(popupContent); 

演示:http://plnkr.co/edit/W11Z95Y9dQZThBu2dKQz?p=preview

+0

我正要走上類似的道路,但我會建議一些可能的「改進」。我打算爲'input'創建一個'label'元素,在這種情況下這似乎很有意義。 –

+0

@JonP是的,總有改進的餘地! :-)請隨時爲OP提供一些指導,甚至可能會通過一個新的答案。 – ghybs