I run a block of code that runs off of lost focus. It runs fine the first time, but then I try to set focus to a textbox(which appears not to work) so I click in the textbox and tab out. The lost focus event does not work that time? Why is that?
Here is the related code:
on(document.getElementById('ownerAddress'), 'focusout', checkAddress);
on(document.getElementById('ownerAddress'), 'focusin', getElementId);
function getElementId() {
node = document.activeElement.id;
}
function checkAddress() {
console.log(node);
var locator = new Locator("http://maps.decaturil.gov/arcgis/rest/services/Public/WebAddressLocator/GeocodeServer");
//console.log(document.getElementById('ownerAddress').value);
//node = document.getElementById('ownerAddress');
node = document.getElementById(node);
// according to your service it takes Single Line
var params = {
"Single Line Input": node.value
};
locator.addressToLocations(params).then(function (addressCandidates) {
//console.log('success', addressCandidates);
//console.log(addressCandidates.length);
data = {
identifier: "id",
items: []
};
layout = [[
// {'name': 'FID', 'field': 'id', 'width': '50px'},//
{ 'name': 'Address', 'field': 'address', 'width': '200px' }
]];
if (addressCandidates.length > 1) {
for (a = 0; a < addressCandidates.length; a++) {
// This is the address that should go into a grid cell
data.items.push(lang.mixin({ id: a + 1 }, { address: addressCandidates.address }));
console.log(addressCandidates.address);
}
console.log(addressCandidates);
items = arrayUtils.map(addressCandidates, function (result) {
console.log(result);
return result;
});
console.log(items);
}
console.log("Log" + data);
if (window.grid) {
Maingds
dojo.destroy('grid');
dijit.byId('grid').destroy(true);
registry.remove(dom.byId('gridDiv'));
}
store = new ItemFileWriteStore({ data: data });
grid = new DataGrid({
id: 'grid',
store: store,
structure: layout,
autoWidth: true,
autoHeight: false,
rowSelector: '20px'
});
// display grid
//document.getElementById("grid").style.display = "block";
//alert("hello " + addressCandidates.length);
// Show modal
if (addressCandidates.length >= 1) {
$("#myModal").modal("show");
$('#myModal').show(function () {
$(this).trigger('isVisible');
});
//registry.byId("grid").display=block;
grid.on("rowclick", onRowClickHandler);
//console.log(addressCandidates.length);
//hookup the event
$('#myModal').bind('isVisible', isVisible);
var adresses = addressCandidates.map(function () {
return x.address;
});
//console.log(adresses);
}
else
{
alert("This address does not appear to be a city address. Please try again.");
document.getElementById(node).focus();
}
}).otherwise(function (err) {
console.log('somethings wrong', err);
});
}
//declare event to run when div is visible
function isVisible() {
/*append the new grid to the div*/
grid.placeAt("gridDiv");
/*Call startup() to render the grid*/
grid.startup();
}
function onRowClickHandler(evt) {
console.log(evt);
var clickedAddress = evt.grid.getItem(evt.rowIndex).address;
console.log(clickedAddress);
alert(clickedAddress);
// console.log(evt.explicitOriginalTarget.data);
}
});
What I needed to do was to evaluate the number of addresses at the beginning of my statement. Here is the resolution:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="http://js.arcgis.com/3.14/dijit/themes/claro/claro.css">
<link rel="stylesheet" href="http://js.arcgis.com/3.14/esri/css/esri.css">
<script src="http://js.arcgis.com/3.14/"></script>
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<style>
#gridDiv {
height: 100%;
width: 100%;
}
#myModal {
height: 100%;
width: 100%;
}
.modal-body {
height: 300px;
}
</style>
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7/html5shiv.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body class="claro">
<form id="frmTest">
<label id="lblOwnerAddress" for="ownerAddress">Owner's Address</label>
<input type="text" id="ownerAddress" name="ownerAddress" value="111 S Main" />
<div id="mainDiv" class="container">
<!-- Modal -->
<div class="modal fade" id="myModal" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Select an Address</h4>
</div>
<div class="modal-body">
<div id="gridDiv"></div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
</div>
</form>
<script>
var items
require([
"dojo/on",
"dojo/_base/array",
"esri/tasks/locator",
"dojox/grid/DataGrid",
"dojo/data/ItemFileWriteStore",
"dijit/registry", "dojo/parser",
"dijit/registry",
"dojo/dom",
"dojo/_base/lang",
"dijit/layout/ContentPane",
"dojo/domReady!"
],
function (on, arrayUtils, Locator, DataGrid, ItemFileWriteStore, registry, parser, registry, dom, lang) {
parser.parse();
var store, grid, data, layout, node;
//document.getElementById("grid").style.display = "none";
on(document.getElementById('ownerAddress'), 'focusout', checkAddress);
on(document.getElementById('ownerAddress'), 'focusin', getElementId);
function getElementId() {
node = document.activeElement.id;
}
function checkAddress() {
console.log(node);
var locator = new Locator("http://maps.decaturil.gov/arcgis/rest/services/Public/WebAddressLocator/GeocodeServer");
//console.log(document.getElementById('ownerAddress').value);
//node = document.getElementById('ownerAddress');
node = document.getElementById(node);
// according to your service it takes Single Line
var params = {
"Single Line Input": node.value
};
locator.addressToLocations(params).then(function (addressCandidates) {
//console.log('success', addressCandidates);
//console.log(addressCandidates.length);
if (addressCandidates.length >= 1) {
console.log(addressCandidates.length);
data = {
identifier: "id",
items: []
};
layout = [[
// {'name': 'FID', 'field': 'id', 'width': '50px'},//
{ 'name': 'Address', 'field': 'address', 'width': '200px' }
]];
if (addressCandidates.length > 1) {
for (a = 0; a < addressCandidates.length; a++) {
// This is the address that should go into a grid cell
data.items.push(lang.mixin({ id: a + 1 }, { address: addressCandidates.address }));
console.log(addressCandidates.address);
}
console.log(addressCandidates);
items = arrayUtils.map(addressCandidates, function (result) {
console.log(result);
return result;
});
console.log(items);
}
console.log("Log" + data);
if (window.grid) {
dojo.destroy('grid');
dijit.byId('grid').destroy(true);
registry.remove(dom.byId('gridDiv'));
}
store = new ItemFileWriteStore({ data: data });
grid = new DataGrid({
id: 'grid',
store: store,
structure: layout,
autoWidth: true,
autoHeight: false,
rowSelector: '20px'
});
// display grid
//document.getElementById("grid").style.display = "block";
alert("hello " + addressCandidates.length);
// Show modal
$("#myModal").modal("show");
$('#myModal').show(function () {
$(this).trigger('isVisible');
});
//registry.byId("grid").display=block;
grid.on("rowclick", onRowClickHandler);
//console.log(addressCandidates.length);
//hookup the event
$('#myModal').bind('isVisible', isVisible);
}
else
{
alert("This does not appear to be an address in the city of Decatur. Please try again.");
dom.byId(node).focus();
dom.byId(node).value = "";
}
var adresses = addressCandidates.map(function () {
return x.address;
});
//console.log(adresses);
})
.otherwise(function (err) {
console.log('somethings wrong', err);
});
}
//declare event to run when div is visible
function isVisible() {
/*append the new grid to the div*/
grid.placeAt("gridDiv");
/*Call startup() to render the grid*/
grid.startup();
}
function onRowClickHandler(evt) {
console.log(evt);
var clickedAddress = evt.grid.getItem(evt.rowIndex).address;
console.log(clickedAddress);
alert(clickedAddress);
// console.log(evt.explicitOriginalTarget.data);
}
});
</script>
</body>
</html>