OpenLayers3覆盖文本框和按钮
OpenLayers3 Overlay with textboxes and buttons
我的OpenLayers3地图上有一个Overlay,它在选择时显示在Feature上。当用户单击地图上的任何位置(而不是某个特征)时,取消选择某个特征时,此覆盖将被销毁。
Overlay显示了一些文本框和两个按钮:Save Changes和Delete。用户应该能够使用文本框并按Save Changes编辑功能,或者按Delete,删除前将显示一个模式窗口进行确认。
然而,事件传播的性质造成了一些麻烦。当Overlay的stopEvent选项设置为true时,文本框是可点击和可编辑的,但按钮的事件不会触发。当设置为false时,文本框被点击到地图,导致取消选择和破坏覆盖,尽管现在可以点击按钮。
关于如何使文本框既可输入又可编辑,同时保持按钮的事件功能,有什么建议吗?
我无法让jsFiddle正常工作,但下面是一些示例代码:
选择地图上的工具
var interaction = new ol.interaction.Select({
condition: ol.events.condition.click
});
var refreshView = function () {
refreshPopup();
};
interaction.getFeatures().on('add', refreshView);
interaction.getFeatures().on('remove', refreshView);
map.addInteraction(interaction);
弹出菜单的HTML
<div class="popover">
<div class="arrow"></div>
<h3 class="popover-title" style="display: none;"></h3>
<div class="popover-content">
<table class="popupTable table table-bordered table-hover">
<tbody>
<tr><td>ID: </td><td>id</td></tr>
<tr><td>value1/td><td><input type="text"></td></tr>
<tr><td>value2</td><td><input type="text"></td></tr>
</tbody>
</table>
<button class="btn save-feature">Save</button>
<button class="btn delete-feature">Delete</button>
</div>
</div>
经过一些测试,我发现while stopEvent:true;尽管默认行为已经停止,但按钮的.click()函数仍在被调用。
因此,解决方案(尽管可能不太好)是明确定义每个button.click()事件中的行为。例如,在单击时显示模态,而不是使用Bootstrap的数据属性来处理它。
例如:
$(".save-feature").click(function (event) {
// Do Save stuff here
});
$(".delete-feature").click(function (
// Explicitly show modal because OpenLayers Overlay with stopEvent: true
// suppresses stuff
$("#delete-modal").modal('show');
});
相关文章:
- 我想重定向点击,然后更改按钮文本,我该怎么做
- 使用JavaScript将标题文本替换为按钮文本
- 将按钮文本从“;喜欢“;至“;喜欢“;单击时
- 如何在jQuery mobile中更改按钮文本
- 不便更改Javascript中的按钮文本
- 为什么我的导航按钮或按钮文本不会移动到中心
- 根据单选按钮值更改提交按钮文本
- 更改按钮文本
- 按钮文本中的新行
- 在呈现 D3 SVG 对象之前更改引导按钮文本
- 制作一个“;输入“;按钮文本不可编辑
- 通过引导程序加载/重置后更改按钮文本
- 动态创建的按钮文本
- jQuery移动列表过滤:如何更改清除按钮文本
- 如何使用JavaScript在点击时更改按钮文本
- sap.m.按钮文本格式化程序
- AngularJS按钮文本不起作用
- 如何在单击时更改按钮文本
- 使用Jquery仅切换按钮文本中的ASCII字符
- TinyMCE 编辑输入值和按钮文本