javascript - Uncaught ReferenceError : onchange function is not defined (wordpress)

标签 javascript wordpress openlayers-3

我正在尝试使用 Openlayers 工具插入图层下拉列表以显示在 WordPress 中的 map 中选择的图层。但是当我尝试从 drpdown 列表中进行选择时出现此错误:

Uncaught ReferenceError: update is not defined
    at HTMLSelectElement.onchange ((index):226)

我的脚本:

var geojsonFormat = new ol.format.GeoJSON();

var vectorSource = new ol.source.Vector({
  loader: function(extent, resolution, projection) {
    var url = "http://localhost:8080/geoserver/opengeo/ows?service=WFS&" +
        "version=2.0.0&request=GetFeature&typename=opengeo:arbousiers0&CQL_FILTER=code_espec='Arteherb'"+
        "&outputFormat=text/javascript&format_options=callback:loadFeatures"+
        "&srsname=EPSG:3857";

    $.ajax({url: url, dataType: 'jsonp', jsonp: false});
  },
  strategy: ol.loadingstrategy.tile(ol.tilegrid.createXYZ({
    maxZoom: 19

  }))

});
window.loadFeatures = function(response) {
  vectorSource.addFeatures(geojsonFormat.readFeatures(response));
};

function update() {
  vectorSource.clear(true);
};

    function getRandomColor() {
        var letters = '0123456789ABCDEF';
        var color = '#';
        for (var i = 0; i < 6; i++ ) {
            color += letters[Math.floor(Math.random() * 16)];
        }
        return color;
    }

var map = new ol.Map({
  layers: [
  new ol.layer.Vector({
  source: vectorSource,
  style: new ol.style.Style({
    stroke: new ol.style.Stroke({
      color: 'rgba(0, 0, 255, 0.0)',
      width: 0.3
    }),
     fill : new ol.style.Fill({
   color: getRandomColor()
  })
  })
})
  ],
  target: document.getElementById('mapid'),
  view: new ol.View({
    center: [-1095791.453557, 3422374.879112],
    maxZoom: 19,
    zoom: 5
  })
});

我的下拉列表代码:

<select class='Nom' name="pam" id="pam" onchange="update()">
<option value="">--- Select Layer ---</option>
[insert_php]
$conn_string = "host=localhost port=5432 dbname=postgres user=postgres password=";
$conn = pg_connect($conn_string);


 $sql = pg_query($conn, "SELECT * FROM especes");

while($ligne_liste=pg_fetch_array($sql)) {
    echo '<option value="'.$ligne_liste['nom'].'">'.$ligne_liste['nom']."</option>\n";
}
echo '</select>';
[/insert_php]

然后我按照这里的答案在functions.php中调用onchage事件: https://wordpress.stackexchange.com/questions/248026/add-onchange-to-select-in-a-wp-form

function addAttributeToDropdown($html_content){
  $html_content = str_replace('<select','<select onchange="update()"',$html_content);
  return $html_content; 
}

add_filter('wp_dropdown_cats','addAttributeToDropdown');

最佳答案

wordpress 可能会将脚本作为 IIFE 运行。因此,将事件处理程序附加到窗口对象

window.update = function() {
    vectorSource.clear(true);
}

关于javascript - Uncaught ReferenceError : onchange function is not defined (wordpress),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44339686/

相关文章:

javascript - Angularjs - 将服务数据绑定(bind)到许多 Controller 中的模型

javascript - 超大幻灯片的响应式替代方案

javascript - 为什么我的 ajax 请求得到响应 0?

javascript - SVG 图层图像不会在 Mobile Safari 中以纵向模式显示

javascript - 无法在 .text() 内实现换行符 -\n 不起作用

javascript - 用于 UI 开发的 CSS 框架

JavaScript - 获取类名

javascript - 不能将 openlayers-3 与 webpack 一起使用

JavaScript Loop 卡住初学者

php - 无法删除 WooCommerce 图像缩放