- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这样的 ArcGIS Javascript 代码:
<script type="text/javascript">
require(["dojo/ready",
"dgrid/OnDemandGrid",
"dgrid/Selection",
"dojo/store/Memory",
"dojo/_base/array",
"dojo/dom-style",
"dijit/registry",
"esri/map",
"esri/dijit/Popup",
"esri/dijit/PopupTemplate",
"esri/layers/FeatureLayer",
"dojo/dom-class",
"dojo/dom-construct",
"dojo/on",
"esri/InfoTemplate",
"esri/symbols/SimpleLineSymbol",
"esri/symbols/SimpleFillSymbol",
"esri/tasks/QueryTask",
"esri/tasks/query",
"dojo/_base/declare",
"dojo/number",
"dojo/on",
"dojox/charting/Chart",
"esri/renderers/UniqueValueRenderer",
"dojo/parser",
"dojo/_base/Color",
"dijit/layout/BorderContainer",
"dijit/layout/ContentPane"
], function (
ready,
Grid,
Selection,
Memory,
array,
domStyle,
registry,
Map,
Popup,
PopupTemplate,
FeatureLayer,
domClass,
domConstruct,
on,
InfoTemplate,
SimpleLineSymbol,
SimpleFillSymbol,
QueryTask,
Query,
declare,
dojoNum,
on,
Chart,
UniqueValueRenderer,
parser
) {
ready(function() {
parser.parse();
var popup = Popup({
titleInBody: false
},domConstruct.create("div"));
// create the dgrid
window.grid = new (declare([Grid, Selection]))({
// use Infinity so that all data is available in the grid
bufferRows: Infinity,
columns: {
"FID": "FID",
"PROV": "PROV"
}
}, "grid");
// add a click listener on the ID column
grid.on(".field-id:click", selectState);
var initialExtent = new esri.geometry.Extent({"xmin":89.971,"ymin":-12.472,"xmax":144.301,"ymax":9.511,"spatialReference":{"wkid":4326}});
map = new esri.Map("map", { extent: initialExtent,infoWindow: popup});
//var basemap = new esri.layers.ArcGISTiledMapServiceLayer("http://services.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places/MapServer");
var basemap2 = new esri.layers.ArcGISDynamicMapServiceLayer("http://localhost:6080/arcgis/rest/services/BaseMap/Peta_Dasar_Indonesia_Colors/MapServer",{"opacity":0.4});
map.addLayer(basemap2);
//map.addLayer(basemap);
domClass.add(window.map.infoWindow.domNode, "myTheme");
var template = new PopupTemplate({
title: "Data Luas Lahan Sawah {PROV}",
description: "of starters from {PROV} finished",
});
window.statesUrl = "http://localhost:6080/arcgis/rest/services/BaseMap/Peta_Dasar_Indonesia_Colors/MapServer/8";
window.outFields = ["FID","PROV"];
var fl = new FeatureLayer(window.statesUrl, {
id: "stat",
mode: 1, // ONDEMAND, could also use FeatureLayer.MODE_ONDEMAND
infoTemplate:template,
outFields: window.outFields
});
fl.on("load", function() {
fl.maxScale = 0; // show the states layer at all scales
fl.setSelectionSymbol(new SimpleFillSymbol().setOutline(null).setColor("#AEC7E3"));
});
fl.on("click", selectGrid);
// change cursor to indicate features are click-able
fl.on("mouse-over", function() {
map.setMapCursor("pointer");
});
fl.on("mouse-out", function() {
map.setMapCursor("default");
});
map.addLayer(fl);
map.on("load",
function addFeatureLayer() {
var defaultSymbol = new SimpleFillSymbol().setStyle(SimpleFillSymbol.STYLE_NULL);
defaultSymbol.outline.setStyle(SimpleLineSymbol.STYLE_NULL);
//create renderer
var renderer = new UniqueValueRenderer(defaultSymbol, "PROV");
//add symbol for each possible value
renderer.addValue("Banten", new SimpleFillSymbol().setColor("#00FA1D"));
renderer.addValue("Dki Jakarta", new SimpleFillSymbol().setColor("#FA0000"));
renderer.addValue("Jawa Barat", new SimpleFillSymbol().setColor("#FAFA00"));
renderer.addValue("Jawa Tengah", new SimpleFillSymbol().setColor("#00FA1D"));
renderer.addValue("Daerah Istimewa Yogyakarta", new SimpleFillSymbol().setColor("#FAFA00"));
renderer.addValue("Jawa Timur", new SimpleFillSymbol().setColor("#FAFA00"));
var template = new PopupTemplate({
title: "Data {PROV}",
description: "Data Luas Lahan Sawah {PROV}",
});
var featureLayer = new FeatureLayer("http://localhost:6080/arcgis/rest/services/BaseMap/Peta_Dasar_Indonesia_Colors/MapServer/8", {
mode: 1, // ONDEMAND, could also use FeatureLayer.MODE_ONDEMAND
infoTemplate:template,
outFields: window.outFields
});
featureLayer.setRenderer(renderer);
map.addLayer(featureLayer);
} ,
function( evt ){
// show the border container now that the dijits
// are rendered and the map has loaded
domStyle.set(registry.byId("container").domNode, "visibility", "visible");
populateGrid(Memory); // pass a reference to the MemoryStore constructor
});
function populateGrid(Memory) {
var qt = new QueryTask(window.statesUrl);
var query = new Query();
query.where = "1=1";
query.returnGeometry = false;
query.outFields = window.outFields;
qt.execute(query, function(results) {
var data = array.map(results.features, function(feature) {
return {
// property names used here match those used when creating the dgrid
"FID": feature.attributes[window.outFields[0]],
"PROV": feature.attributes[window.outFields[1]]
}
});
var memStore = new Memory({ data: data });
window.grid.set("store", memStore);
});
}
// fires when a row in the dgrid is clicked
function selectState(e) {
// select the feature
var fl = map.getLayer("stat");
var query = new Query();
query.objectIds = [parseInt(e.target.innerHTML)];
fl.selectFeatures(query, FeatureLayer.SELECTION_NEW, function(result) {
if ( result.length ) {
// re-center the map to the selected feature
window.map.centerAt(result[0].geometry.getExtent().getCenter());
} else {
console.log("Feature Layer query returned no features... ", result);
}
});
}
// fires when a feature on the map is clicked
function selectGrid(e) {
var profinsi = e.graphic.attributes.PROV;
var id = e.graphic.attributes.FID;
// select the feature that was clicked
var query = new Query();
query.objectIds = [id];
var states = map.getLayer("stat");
states.selectFeatures(query, FeatureLayer.SELECTION_NEW);
// select the corresponding row in the grid
// and make sure it is in view
grid.clearSelection();
grid.select(id);
}
function test(){
alert("alert");
}
});
});
</script>
我想在 dojo.ready 函数中调用函数。例如,我想用 onclick 调用函数 test() :
<input type="submit" value="Submit" onclick="test();">
但还是不行。
谁能帮我解释一下如何在 dojo.ready 中调用函数?
最佳答案
那是因为在文档中编写事件处理程序是一种不好的做法。如果您在函数内部添加函数,则它们的范围仅限于该函数(这意味着,它们只能从 ready()
函数内部访问,而不能从 DOM(= 从 HTML 页面)访问。
用正常的话来说:“按钮看不到函数 test()”。
您可以通过两种方式解决:
第一种方法是通过将 test()
函数移出 ready()
回调或通过替换函数来全局范围限定 test()
函数通过这个:
test = function() {
alert("alert");
};
因为您没有将 var
放在 test
变量前面,这意味着它现在是全局范围的,这意味着它可以从 DOM 访问。但是,我不推荐它,它被认为是一种不好的做法。谷歌搜索“为什么全局变量是不好的 javascript”可以让您大致了解它为什么不好。
第二种可能性是通过使用 dojo/on
模块或 dojo/query< 将事件声明本身移动到
模块,例如:ready()
范围内
require(["dojo/ready", "dojo/query"], function(ready, query) {
ready(function() {
query("input[type=\"submit\"]").on("click", test);
function test() {
alert("test");
}
});
});
还有一个 JSFiddle:http://jsfiddle.net/g00glen00b/tLN5b/
这可以被认为是一种更好的做法,因为您没有使用全局命名空间并且可以定义事件处理程序。
关于javascript - 在 dojo.ready 中调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20704436/
为了让我的代码几乎完全用 Jquery 编写,我想用 Jquery 重写 AJAX 调用。 这是从网页到 Tomcat servlet 的调用。 我目前情况的类似代码: var http = new
我想使用 JNI 从 Java 调用 C 函数。在 C 函数中,我想创建一个 JVM 并调用一些 Java 对象。当我尝试创建 JVM 时,JNI_CreateJavaVM 返回 -1。 所以,我想知
环顾四周,我发现从 HTML 调用 Javascript 函数的最佳方法是将函数本身放在 HTML 中,而不是外部 Javascript 文件。所以我一直在网上四处寻找,找到了一些简短的教程,我可以根
我有这个组件: import {Component} from 'angular2/core'; import {UserServices} from '../services/UserService
我正在尝试用 C 实现一个简单的 OpenSSL 客户端/服务器模型,并且对 BIO_* 调用的使用感到好奇,与原始 SSL_* 调用相比,它允许一些不错的功能。 我对此比较陌生,所以我可能会完全错误
我正在处理有关异步调用的难题: 一个 JQuery 函数在用户点击时执行,然后调用一个 php 文件来检查用户输入是否与数据库中已有的信息重叠。如果是这样,则应提示用户确认是否要继续或取消,如果他单击
我有以下类(class)。 public Task { public static Task getInstance(String taskName) { return new
嘿,我正在构建一个小游戏,我正在通过制作一个数字 vector 来创建关卡,该数字 vector 通过枚举与 1-4 种颜色相关联。问题是循环(在 Simon::loadChallenge 中)我将颜
我有一个java spring boot api(数据接收器),客户端调用它来保存一些数据。一旦我完成了数据的持久化,我想进行另一个 api 调用(应该处理持久化的数据 - 数据聚合器),它应该自行异
首先,这涉及桌面应用程序而不是 ASP .Net 应用程序。 我已经为我的项目添加了一个 Web 引用,并构建了各种数据对象,例如 PayerInfo、Address 和 CreditCard。但问题
我如何告诉 FAKE 编译 .fs文件使用 fsc ? 解释如何传递参数的奖励积分,如 -a和 -target:dll . 编辑:我应该澄清一下,我正在尝试在没有 MSBuild/xbuild/.sl
我使用下划线模板配置了一个简单的主干模型和 View 。两个单独的 API 使用完全相同的配置。 API 1 按预期工作。 要重现该问题,请注释掉 API 1 的 URL,并取消注释 API 2 的
我不确定什么是更好的做法或更现实的做法。我希望从头开始创建目录系统,但不确定最佳方法是什么。 我想我在需要显示信息时使用对象,例如 info.php?id=100。有这样的代码用于显示 Game.cl
from datetime import timedelta class A: def __abs__(self): return -self class B1(A):
我在操作此生命游戏示例代码中的数组时遇到问题。 情况: “生命游戏”是约翰·康威发明的一种细胞自动化技术。它由一个细胞网格组成,这些细胞可以根据数学规则生存/死亡/繁殖。该网格中的活细胞和死细胞通过
如果我像这样调用 read() 来读取文件: unsigned char buf[512]; memset(buf, 0, sizeof(unsigned char) * 512); int fd;
我用 C 编写了一个简单的服务器,并希望调用它的功能与调用其他 C 守护程序的功能相同(例如使用 ./ftpd start 调用它并使用 ./ftpd stop 关闭该实例)。显然我遇到的问题是我不知
在 dos 中,当我粘贴此命令时它会起作用: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://google.
在 dos 中,当我粘贴此命令时它会起作用: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://google.
我希望能够从 cmd 在我的 Windows 10 计算机上调用 python3。 我已重新安装 Python3.7 以确保选择“添加到路径”选项,但仍无法调用 python3 并使 CMD 启动 P
我是一名优秀的程序员,十分优秀!