Мне интересно, как я это делаю, потому что все время переменная возвращается к вашему значению по умолчанию. Это приложение Ibeacon, я не знаю, нужно ли показывать подробности о моем приложении. Я просто хочу назвать функцию что-то один раз, может ли кто-нибудь мне помочь?Как выполнить, если условие только один раз
function uint8ArrToHexStringNoSpace(arr) {
\t return Array.prototype.map.call(arr, function(n) {
\t \t var s = n.toString(16);
\t \t if(s.length == 1) {
\t \t \t s = '0'+s;
\t \t }
\t \t return s;
\t }).join('');
}
var quit;
function something() {
if(quit) {
window.open("info.html");
}
quit = true;
}
function appendTd(root, value, id) {
\t var text = document.createTextNode(value);
\t var td = document.createElement("p");
\t if(id) {
\t \t td.id = id;
\t }
\t td.appendChild(text);
\t root.appendChild(td);
}
function hex16(i) {
\t var s = i.toString(16);
\t while(s.length < 4) {
\t \t s = '0'+s;
\t }
\t return s;
}
var beacons = {};
var app = {
\t
\t initialize: function() {
\t \t // Important to stop scanning when page reloads/closes!
\t \t window.addEventListener('beforeunload', function(e)
\t \t {
\t \t \t iBeacon.stopScan();
\t \t });
\t \t this.bindEvents();
\t \t
\t },
\t bindEvents: function() {
\t \t document.addEventListener('deviceready', this.onDeviceReady, false);
\t },
\t onDeviceReady: function() {
\t \t //app.receivedEvent('deviceready');
\t \t app.startScan();
\t },
\t receivedEvent: function(id) {
\t \t var parentElement = document.getElementById(id);
\t \t var listeningElement = parentElement.querySelector('.listening');
\t \t var receivedElement = parentElement.querySelector('.received');
\t \t listeningElement.setAttribute('style', 'display:none;');
\t \t receivedElement.setAttribute('style', 'display:block;');
\t \t console.log('Received Event: ' + id);
\t },
\t
\t startScan: function() {
\t \t
\t \t
\t \t iBeacon.startScan({}, function(beacon) {
\t \t \t //console.log("beacon found: "+beacon.address+" "+beacon.name+" "+beacon.rssi+"/"+beacon.txPower);
\t \t \t var r = beacon.region;
\t \t \t //console.log("M"+r.major.toString(16)+" m"+r.minor.toString(16)+" uuid "+uint8ArrToHexStringNoSpace(r.uuid));
\t \t \t var key = 'tx'+beacon.address.replace(/:/g,'_');
\t \t \t //console.log('key: '+key);
\t \t \t
\t \t \t
\t \t \t
\t \t \t
\t \t \t if(beacons[key] == null) {
\t \t \t \t beacons[key] = beacon;
\t \t \t \t
\t \t \t \t
\t \t \t \t var root = document.getElementById("beaconListRoot");
\t \t \t \t var tr = document.createElement("tr");
\t \t \t \t var br = document.createElement("br");
\t \t \t \t
\t \t \t \t // <tr><td>Address</td><td>Name</td><td>RSSI</td><td>ID</td><td>UUID</td></tr>
\t \t \t \t var adress = ' Adress: ';
\t \t \t \t var name = ' Name: ';
\t \t \t \t var distance = ' distance: ';
\t \t \t \t var major = ' Major: ';
\t \t \t \t var minor = 'Minor: ';
\t \t \t \t var UUID = ' UUID: ';
\t \t \t \t
\t \t \t \t appendTd(tr, adress + beacon.address + name + beacon.name);
\t \t \t \t appendTd(tr, distance + beacon.rssi+" /"+beacon.txPower+"\u00A0"+beacon.estimatedDistance.toFixed(2)+'m', key);
\t \t \t \t appendTd(tr, major + hex16(r.major)+"\u00A0"+ minor +hex16(r.minor));
\t \t \t \t appendTd(tr, UUID + uint8ArrToHexStringNoSpace(r.uuid));
\t \t \t \t root.appendChild(tr);
\t \t \t \t
\t \t \t \t
\t \t \t } else {
\t \t \t \t var td = document.getElementById(key);
\t \t \t \t td.firstChild.nodeValue = 'Power: ' + beacon.rssi+"/"+beacon.txPower+ ' Distance: ' + "\u00A0"+beacon.estimatedDistance.toFixed(2)+'m';
\t \t \t
\t \t \t }
\t \t \t
\t \t \t if(beacon.address == '78:A5:04:13:3B:17' && beacon.estimatedDistance.toFixed(2) <= 10){
\t \t \t \t something();
\t \t \t }
\t \t \t
\t \t \t
\t \t }, function(error) {
\t \t \t console.log("startScan error: " + error);
\t \t });
\t },
};
Не могли бы вы быть немного более конкретно о том, где в этом фрагменте кода проблема есть ...? –
С первого взгляда это звучит по-разному. Можете ли вы сказать нам, какой условный вы хотите выполнить только один раз? В противном случае это пугающее количество кода для прохода! –
Как это связано только с Javascript? На любом языке программирования запишите состояние в переменной, называемой actionPerformed = false, которая инициализируется как false. после щелчка установите значение true. Как только это правда, сделайте no-op. – randominstanceOfLivingThing