如果只有一次有条件,如何执行

How to execute if conditional just once

本文关键字:何执行 执行 有条件 一次 如果      更新时间:2023-09-26

我想知道我是怎么做到的,因为变量总是返回到你的默认值。这是一个 Ibeacon 应用程序, 我不知道我是否需要显示有关我的应用程序的更多详细信息.我只想调用一次函数,有人可以帮我吗?

function uint8ArrToHexStringNoSpace(arr) {
	return Array.prototype.map.call(arr, function(n) {
		var s = n.toString(16);
		if(s.length == 1) {
			s = '0'+s;
		}
		return s;
	}).join('');
}
var quit;
function something() {
    if(quit) {
       window.open("info.html");
    } 
    quit = true;
}
function appendTd(root, value, id) {
	var text = document.createTextNode(value);
	var td = document.createElement("p");
	if(id) {
		td.id = id;
	}
	td.appendChild(text);
	root.appendChild(td);
}
function hex16(i) {
	var s = i.toString(16);
	while(s.length < 4) {
		s = '0'+s;
	}
	return s;
}
var beacons = {};
var app = {
	
	initialize: function() {
		// Important to stop scanning when page reloads/closes!
		window.addEventListener('beforeunload', function(e)
		{
			iBeacon.stopScan();
		});
		this.bindEvents();
		
	},
	bindEvents: function() {
		document.addEventListener('deviceready', this.onDeviceReady, false);
	},
	onDeviceReady: function() {
		//app.receivedEvent('deviceready');
		app.startScan();
	},
	receivedEvent: function(id) {
		var parentElement = document.getElementById(id);
		var listeningElement = parentElement.querySelector('.listening');
		var receivedElement = parentElement.querySelector('.received');
		listeningElement.setAttribute('style', 'display:none;');
		receivedElement.setAttribute('style', 'display:block;');
		console.log('Received Event: ' + id);
	},
	
	startScan: function() {
		
		
		iBeacon.startScan({}, function(beacon) {
			//console.log("beacon found: "+beacon.address+" "+beacon.name+" "+beacon.rssi+"/"+beacon.txPower);
			var r = beacon.region;
			//console.log("M"+r.major.toString(16)+" m"+r.minor.toString(16)+" uuid "+uint8ArrToHexStringNoSpace(r.uuid));
			var key = 'tx'+beacon.address.replace(/:/g,'_');
			//console.log('key: '+key);
			
			
			
			
			if(beacons[key] == null) {
				beacons[key] = beacon;
				
				
				var root = document.getElementById("beaconListRoot");
				var tr = document.createElement("tr");
				var br = document.createElement("br");
				
				// <tr><td>Address</td><td>Name</td><td>RSSI</td><td>ID</td><td>UUID</td></tr>
				var adress = '  Adress: ';
				var name = '  Name: ';
				var distance = '  distance: ';
				var major = '  Major: ';
				var minor = 'Minor: ';
				var UUID = '  UUID: ';
				
				appendTd(tr, adress + beacon.address + name + beacon.name);
				appendTd(tr, distance + beacon.rssi+" /"+beacon.txPower+"'u00A0"+beacon.estimatedDistance.toFixed(2)+'m', key);
				appendTd(tr, major + hex16(r.major)+"'u00A0"+ minor +hex16(r.minor));
				appendTd(tr, UUID + uint8ArrToHexStringNoSpace(r.uuid));
				root.appendChild(tr);
				
				
			} else {
				var td = document.getElementById(key);
				td.firstChild.nodeValue = 'Power: ' + beacon.rssi+"/"+beacon.txPower+ ' Distance: ' + "'u00A0"+beacon.estimatedDistance.toFixed(2)+'m';
			
			}
			
			if(beacon.address == '78:A5:04:13:3B:17' && beacon.estimatedDistance.toFixed(2) <= 10 ){
				something();
			}
			
			
		}, function(error) {
			console.log("startScan error: " + error);
		});
	},
};

使用localStorage:https://developer.mozilla.org/en/docs/Web/API/Window/localStorage

localStorage(和sessionStorage)允许您保留持久值

function something() {
    localStorage.setItem("somethingCalled", "yes");
    if(quit) {
       window.open("info.html");
    } 
    quit = true;
}

然后你打电话给something()

if (localStorage.getItem("somethingCalled")!="yes") { 
    something()
}

您可能会抱怨使用sessionStorage而不是localStorage(https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage)