Код javascript (jquery), событие on click срабатывает через раз (или реже) в virtualbox, почему так происходит?

В php разделил ip адрес пользователя (взял первые числа до точки ip адреса):

$ip = explode(".",$_SERVER['REMOTE_ADDR'])[0];

На javascript делал генератор случайных чисел от 100 до 1000:

function randomIntegerone(min, max) {
var rand = min - 0.5 + Math.random() * (max - min + 1)
rand = Math.round(rand);
return rand;
}


Подставил таким образом:

var sdivx = randomIntegerone(100, 1000)+"<?php echo $ip; ?>";
(суммировал случайное число из javascript с переменным $ip языка php)

Далее у нас атрибут id тега body переделается так:

if(document.querySelector("body").getAttribute("id") == "sdiv"){
document.querySelector("body").setAttribute("id","sdiv"+sdivx);
}


Но если кликнуть по ссылке этого тега, то наш код либо срабатывает, либо нет:

$("html").on("click","#sdiv"+sdivx+" a",
function(){
$.post("/sdivhandler.php",{subdiv:1},function(a){console.log(a)})
}
)


В компьютере (и ноутбуке) отлично работает, а вот в virtualbox (windows 8 mozilla firefox, последняя версия) и т. п. срабатывает через раз (а может и реже).

P.S. Вот так отлично работает в virtualbox (всегда alert выскакивает):

$("html").on("click","#sdiv"+sdivx+" a",
function(){
alert("hello world");
}
)

Отдельно запрос тоже отлично работает (в virtualbox):

$.post("/sdivhandler.php",{subdiv:1},function(a){console.log(a)})
Но если их вместе запустить в virtualbox то работает, то нет (в консоле ошибок нет).

Если добавить оба (первый алерт, затем запрос):

alert("hello world");
$.post("/sdivhandler.php",{subdiv:1},function(a){console.log(a)})

так сработает только алерт, запрос не будет работать.

Если сперва запрос, потом алерт:
$.post("/sdivhandler.php",{subdiv:1},function(a){console.log(a)})
alert("hello world");

То так всегда работает.

В чем причина? Что делать?
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ответы на вопрос 1
Задайте единый селектор (например class='sdiv')
и подпишите элементы на событие

$(document).ready(function() {
    $(document).on('click', '.sdiv  a', function(){console.log('test')});
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы