我有一个简单的脚本来隐藏和显示某些按钮,但是直到重新加载页面后,JavaScript才会运行。 用户单击该链接后如何使它运行? 例如,让页面在用户第一次链接到该页面时已经隐藏了某些div。

var array = [".section-1", ".section-2", ".section-3", ".section-4", ".section-5"];

var cnt = 0;

$(function() {
    for(var i = 0; i < 5; i++) {
        $(array[i]).hide();
    }
    $(array[cnt]).show();
    $(".previous").hide();
    $(".next").click(function () {
        if(cnt < 4){
            $(array[cnt]).hide();
            cnt++;
            $(array[cnt]).show();
        }
        if (cnt == 4) {
            $(".next").hide();
        }
        if(cnt > 0) {
            $(".previous").show();
        }

    });

    $(".previous").click(function (){

        if(cnt > 0) {
            $(array[cnt]).hide();
            cnt--;
            $(array[cnt]).show();
        }


        if(cnt < 4){
            $(".next").show();
        }
        if(cnt == 0){
            $(".previous").hide();
        }

    });
});

这是清单文件。

// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// compiled file.
//
// Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
// about supported directives.
//
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require users

===============>>#1 票数:5 已采纳

您的问题是turbolinks

问题在于,Turbolinks会阻止您的JS“正常”加载,因为它每次都会通过ajax重新加载页面的主体(破坏JS,因为不会绑定所有事件)

两种解决方案是编码您的JS以使用Turbolinks,或使用jquery-turbolinks实现更自然的解决方案

如果要使当前代码与Turbolinks配合使用,可以使用以下代码:

var ready = function(){

    var array = [".section-1", ".section-2", ".section-3", ".section-4", ".section-5"];
    var cnt = 0;

    for(var i = 0; i < 5; i++) {
        $(array[i]).hide();
    }
    $(array[cnt]).show();
    $(".previous").hide();
    $(".next").click(function () {
        if(cnt < 4){
            $(array[cnt]).hide();
            cnt++;
            $(array[cnt]).show();
        }
        if (cnt == 4) {
            $(".next").hide();
        }
        if(cnt > 0) {
            $(".previous").show();
        }

    });

    $(".previous").click(function (){

        if(cnt > 0) {
            $(array[cnt]).hide();
            cnt--;
            $(array[cnt]).show();
        }


        if(cnt < 4){
            $(".next").show();
        }
        if(cnt == 0){
            $(".previous").hide();
        }

    });
});

$(document).on("page:load ready", ready);

===============>>#2 票数:0

这似乎是CSS的工作。 您可以使用css在页面加载之前将div上的display属性设置为“ none”,然后一旦javascript开始运行,就可以决定是否显示它们。

作为将来的参考,请注意,直到页面刷新后JS才运行,原因是您将所有JavaScript都放在$(function() {})方法中,该方法直到页面加载完成后才执行。

您还可以在ready函数之外添加几行代码以立即执行代码。 不过这不太可取,因为损坏的JavaScript会阻止您的页面加载。

  ask by CPride translate from so

未解决问题?本站智能推荐: