setTimeout не выполняется в Chrome?

#jquery #google-chrome

#jquery #google-chrome

Вопрос:

Я застрял с этим кодом javascript; это не время ожидания выполнения!! даже когда я нажимаю на любую ссылку, она не работает должным образом. Я использую chrome: версия 34.0.1847.116 Ubuntu 12.04

кто-нибудь может мне помочь, пожалуйста!!!

это код с пробелами, который я использую, и, кстати, моя версия jquery — 1.11.1.

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html data-wf-site="53314860dc25c5ac0a0001b9">
<head>
<meta charset="utf-8">
<title>Tactutalities - Administration</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="generator" content="Webflow"> 

<!-- CSS Librairy -->
<link rel="stylesheet" type="text/css" href="/public/css/normalize.css">
<link rel="stylesheet" type="text/css" href="/public/css/webflow.css">
<link rel="stylesheet" type="text/css" href="/public/css/tactualities.webflow.css">
<link rel="stylesheet" href="/public/css/semantic.min.css" type="text/css" media="screen, projection" />

<link rel="stylesheet" type="text/css" href="/public/css/map.css">
<link rel="stylesheet" type="text/css" href="/public/css/MarkerCluster.css" />
<link rel="stylesheet" type="text/css" href="/public/css/MarkerCluster.Default.css" />
<link rel="stylesheet" type="text/css" href="/public/css/Control.Loading.css" />
<link rel="stylesheet" type="text/css" href="/public/css/L.Control.Sidebar.css" />
<link rel="stylesheet" type="text/css" href="/public/css/leaflet.fusesearch.css" />
<link rel="stylesheet" type="text/css" href="/public/css/pace/pace.css" />
<link rel="stylesheet" type="text/css" href="/public/css/leaflet.css" />
<link rel="stylesheet" type="text/css" href="/public/css/Control.MiniMap.css" />
<link rel="stylesheet" type="text/css" href="/public/css/jqueryui.css">
<link rel="stylesheet" type="text/css" href="/public/css/l.geosearch.css"/>

<link rel="shortcut icon" type="image/x-icon" href="https://y7v4p6k4.ssl.hwcdn.net/placeholder/favicon.ico">

<!-- jQuery Librairy -->    
<script type="text/javascript" src="/public/js/jquery.js"></script>
<script type="text/javascript" src="/public/js/jqueryui.js"></script>  


<!-- Application JS Librairy -->
<script type="text/javascript" src="/public/js/prototype.js"></script>
<script type="text/javascript" src="/public/js/effects.js"></script>
<script type="text/javascript" src="/public/js/application.js"></script>               
<script type="text/javascript" src="/public/js/validation.js"></script> 
<script type="text/javascript" src="/public/js/ajaxRequest.js"></script>
<script type="text/javascript" src="/public/js/webfont.js"></script>
<script type="text/javascript" src="/public/js/tools.js"></script>

<!-- Map JS Librairy -->
<script type='text/javascript' src="/public/js/map/leaflet.js"></script>  
<script type="text/javascript" src="/public/js/map/fuse.js"></script>
<script type="text/javascript" src="/public/js/map/leaflet.fusesearch.js"></script>   
<script type='text/javascript' src='/public/js/map/pace.js'></script>    
<script type='text/javascript' src='/public/js/map/countries.geo.json'></script>
<script type='text/javascript' src="/public/js/map/leaflet.markercluster-src.js"></script>
<script type='text/javascript' src="/public/js/map/Control.FullScreen.js"></script>
<script type="text/javascript" src="/public/js/map/L.Control.Sidebar.js"></script>    
<script type="text/javascript" src="/public/js/map/Control.MiniMap.js"></script> 
<script type="text/javascript" src="/public/js/map/geoSearch/l.control.geosearch.js"></script>
<script type="text/javascript" src="/public/js/map/geoSearch/l.geosearch.provider.google.js"></script>

<script type="text/javascript">

      var j = jQuery.noConflict();
/** 
* disable double click 
**/
console=console || {};
console.log=console.log || {};

jQuery(document).ready(function() {
jQuery(document).on('click', function(event) { 
var target = event.target;
if (target.tagName==='A' || target.tagName==='IMG' || target.tagName==='BUTTON' ) {
if ( jQuery(target).data("clicked") )  {
console.log('Target',target.tagName,' Already Clicked');
event.stopPropagation();
event.preventDefault();
console.log("double click event disabled");
return false;
} else {
console.log('Target',target.tagName,' not Clicked yet');
jQuery(target).data("clicked", true);
jQuery(target).prop('disabled', true);
jQuery(target).addClass("clicked");

setTimeout(function() 
{
jQuery(target).data("clicked", false);  
jQuery(target).prop('disabled', false);
jQuery(target).removeClass("clicked");
console.log('You can click Again!');
}, 5000); // Do something after 5000 millisecondes  
return true;
}
} else {
console.log('Target ',target.tagName,' will not trigger any actions');

}

});

});

</script>
</head>
  

Комментарии:

1. Вы уверены, что попадаете в if инструкции? Помните, что строки чувствительны к регистру 🙂

2. Как далеко продвинулся ваш скрипт до «сбоя»? Применяется ли класс ‘clicked’ к целевому объекту? Попробуйте добавить строку отладчика в свой код в ключевых точках.

3. Да, @EsbenBoye-Jacobsen — элементами могут быть <a>, а не <A>!

4. @EsbenBoye-Jacobsen: да, я проникаю внутрь инструкции if, и target.prop («tagName») === ‘A’ возвращает A для элемента link !!

Ответ №1:

Я переписал часть вашего скрипта, чтобы

 /** 
* disable double click 
**/
console=console || {};
console.log=console.log || {};

jQuery(document).ready(function() {
jQuery(document).on('click', function(event) { 

    var targetElement = event.target || event.srcElement;
    var target = jQuery(targetElement);

    if (targetElement.tagName==='A' || targetElement.tagName==='IMG' || targetElement.tagName==='BUTTON' ) {

        if ( target.data("clicked") ) 
        {
            console.log('Target',targetElement.tagName,' already Clicked');
            event.stopPropagation();
            event.preventDefault();
            console.log("double click event disabled");

            return false;
        } else {
            console.log('Target',targetElement.tagName,' not Clicked yet. We will disable it now');
            target.data("clicked", true);
            target.prop('disabled', true);
            target.addClass("clicked");

            setTimeout(function() 
                {
                    target.data("clicked", false);  
                    target.prop('disabled', false);
                    target.removeClass("clicked");
                    console.log("ok, you can click again");
                }, 5000); // Do something after 5000 millisecondes  
            return true;
        }
    } else {
        console.log('Target was a ',targetElement.tagName,' will not trigger any actions');

    }

    });

});
  

Пожалуйста, посмотрите на это в действии

http://jsfiddle.net/amenadiel/6j38r/

Комментарии:

1. Вы правы, и я сожалею. Я пропустил эту часть, когда переписывал функцию, чтобы использовать делегирование событий jQuery вместо document.addEventListener. Я отредактировал свой ответ

2. спасибо за ответ, но все еще не работает, когда я нажимаю на какую-то ссылку, она не выполняет функцию setTimeout??

3. это работает на скрипте js, да, но не на моей машине, и я не знаю почему???

4. Можете ли вы вставить весь свой код? Возможно, вы используете старую версию jQuery или что-то в этомроде.

5. вот часть того, что я использую :