Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单击事件仅在刷新时有效_Javascript_Jquery_Svg - Fatal编程技术网

Javascript 单击事件仅在刷新时有效

Javascript 单击事件仅在刷新时有效,javascript,jquery,svg,Javascript,Jquery,Svg,TL;DR-有人知道为什么单击处理程序只能在刷新时工作吗 如果我有这样一个函数: function selectState() { $('#state-select').change(function(event) { var state = $(this).val(); $("#vmap").find(("#jqvmap1_") + (state.toLowerCase(''))).click(); }); } function setC

TL;DR-有人知道为什么单击处理程序只能在刷新时工作吗

如果我有这样一个函数:

function selectState() {
    $('#state-select').change(function(event) {
        var state = $(this).val(); 
        $("#vmap").find(("#jqvmap1_") + (state.toLowerCase(''))).click(); 
    });
 }
function setClickHandlers() {
    $(document).on('click','a#reset_tracker',function(event) {
        event.preventDefault();
        $.get('decisiontree/reset_tracker/', function(data) {
            window.location.reload();
        });
    });
    if ($('#vmap').length !== 0) {
        setTimeout(function(){
            $('#vmap').bind('regionClick.jqvmap', function(event, code, region) {
                $('#state-select').val(code.toUpperCase());
            });
            selectState(); //once the map loads, we should be able to select things, right
            }, 500);     
    }
}
我的函数是这样运行的:

function selectState() {
    $('#state-select').change(function(event) {
        var state = $(this).val(); 
        $("#vmap").find(("#jqvmap1_") + (state.toLowerCase(''))).click(); 
    });
 }
function setClickHandlers() {
    $(document).on('click','a#reset_tracker',function(event) {
        event.preventDefault();
        $.get('decisiontree/reset_tracker/', function(data) {
            window.location.reload();
        });
    });
    if ($('#vmap').length !== 0) {
        setTimeout(function(){
            $('#vmap').bind('regionClick.jqvmap', function(event, code, region) {
                $('#state-select').val(code.toUpperCase());
            });
            selectState(); //once the map loads, we should be able to select things, right
            }, 500);     
    }
}
然后被称为:

function setupSlide() {
    setClickHandlers();
    if ((typeof $.fn.vectorMap !== "undefined" && $.fn.vectorMap !== null) &&       
$('#vmap').length !== 0) {
         $('#vmap').vectorMap({
             map: 'usa_en',
             backgroundColor: null,
             color: '#6a1912',
             hoverColor: '#fdb33f',
             selectedColor: '#fdb33f',
             enableZoom: true,
             showTooltip: true,
             onRegionClick: function(event, code, region) {
                 event.preventDefault();
                 $('#state-select').val(code.toUpperCase());
             }
         });
     }
 }
其名称为:

 $(document).ready(function() {

    setupSlide(); 

    $(document).on('click','.prev', function(event) {
        event.preventDefault();
        loadSlide(prev_slide_url,{});
    });

    $(document).on('click','.next', function(event) {
        event.preventDefault();
        var answer;
        if ($(this).hasClass('button') || $(this).hasClass('button-small')) {
            answer = $(this).val();
        } else if ($(this).hasClass('arrow')) {
            answer = $('input[type=checkbox].answer:checked').val();
            if (!answer && $('input[type=checkbox]').length > 0) {
                $("p.inactive").addClass("error");
                return false;
            }
            if ($("#vmap").length > 0) {
                 //for the map, the value is in the select
                 answer = $('#state-select').val();
                 if ($("#state-select").val().length === 0) {
                     $("p.inactive").addClass("error");
                     return false;
                 }

             }
        } else if ($(this).hasClass('navbutton')) {
            answer = $(this).data('val');
        }

    loadSlide(next_slide_url,{answer: answer});
    });
});
为什么只有在刷新包含该函数的页面(即,页面上有#vmap)时,才调用SelectState中的click方法,而不是在单击next或prev按钮(具有document.ready代码块中定义的功能)时调用?在这种情况下,单击处理程序有什么特别之处吗?我真的不确定到底是怎么回事

我要补充的一点是#jqvmap1#指的是SVG地图中的路径元素,即美国地图。但由于它在刷新时工作,我认为这与它是path元素这一事实无关


如果您需要进一步澄清此问题,请告诉我。为混乱的代码道歉。

第一次调用
selectState()
时是否存在
#select_state
对象?如果没有,则没有任何东西可以安装
.change()
处理程序,因此无法安装它。是的。Console.logs显示状态值正在被存储,因此函数可以工作。它只是没有调用click处理程序。分别断开
$(“#vmap”)。查找(“#jqvmap1”)+(state.toLowerCase(“”))
,然后查看它是否正在查找对象。检查结果jQuery对象的
.length()
,查看它是否找到了任何东西。“刷新时工作”,您的意思是“刷新后工作”?如果是这样的话,在F5或浏览器的刷新按钮之后,以及在点击
a#reset_tracker
之后,行为是否相同?我不认为a#reset_tracker是罪魁祸首。这只是希望它的行为能让人们了解正在发生的事情。