2011-09-22 48 views
2

我正在使用jQuery和jQuery UI在Javascript中開發Openlayers工具欄。Javascript中的模態阻止對話框

我想要實現的一個功能是將點添加到地圖。

在openLayers中,您必須收聽名爲'sketchcomplete'的事件。

layer.events.on({ 
    'sketchcomplete': onPointAdded 
}); 

問題出在onPointAdded回調。此回調應該返回true或false。確實意味着該點應該添加到地圖中,false表示取消將該點添加到地圖。

現在的回調是這樣的:

onPointAdded = function(feature) { 
    var f = feature.feature; 
    var result = false; 
    $('#dialog-point-add').dialog({ 
    modal : true, 
    buttons : { 
     'Add point' : function() { 
     result = true; 
     $(this).dialog("close"); 
     }, 
     'Cancel' : function() { 
     result = false; 
     $(this).dialog("close"); 
     } 
    } 
    }); 
    return result; 
}; 

的問題是,該對話框不會阻止執行代碼。我在問你如何處理這種情況?我想通過確認添加點來向用戶顯示對話框。

回答

1

如果我正確地理解了這個問題,你不能用jQuery UI對話框來做到這一點。香草js確認框應該工作。

0

函數不能阻塞,因爲JavaScript是單線程的,沒有別的東西可以執行。你爲什麼不添加邏輯,如果函數返回true,你想調用「添加點」回調?

編輯: 「正常」 會阻止JavaScript的確認對話框:

onPointAdded = function(feature) { 
    return confirm("Sure?"); 
}; 
+0

你是什麼意思添加什麼邏輯?你的意思是改變調用這個回調的代碼?如果是這意味着我必須在OpenLayers代碼中進行挖掘並更改它,但我不想觸摸庫。你可以通過說「添加邏輯」來解釋你的想法嗎?謝謝。 – Marcin

+0

我不知道開放圖層,並認爲當函數返回true時,您會調用一些代碼。所以我的建議是將代碼(或調用)移到jQuery UI回調中。弄錯了,對不起。 –

+0

這個課程的解決方案,但我需要在我的對話框窗體上顯示名稱輸入的剛添加點,當用戶按保存/確認,然後發送帶有座標和名稱的Ajax帖子從這種形式。當用戶點擊「取消」時,我需要刪除該點。我發現了一個不同的openlayers回調的解決方案。非常感謝你... – Marcin