Javascript:自动化功能

标签 javascript jquery html twitter-bootstrap function

美好的一天,

我有一段代码,旨在对鼠标单击执行操作。首先,我创建了一个函数,当我单击另一个元素时,该函数会在元素上滚动屏幕:

(function($) {
    $.fn.goTo = function() {
        $('html, body').animate({
            scrollTop: $(this).offset().top + 'px'
        }, 'fast');

    }
})(jQuery);

然后我将此函数分配给特定的 DOM 元素:

$('#collapse1').on('shown.bs.collapse', function () {
     $('#s1').goTo();  
});

$('#collapse2').on('shown.bs.collapse', function () {
     $('#s2').goTo();  
});

$('#collapse3').on('shown.bs.collapse', function () {
     $('#s3').goTo();  
});

$('#collapse4').on('shown.bs.collapse', function () {
     $('#s4').goTo();  
});
etc...

“shown.bs.collapse”实际上来自 bootstrap crash.js。 “当折叠元素对用户可见时会触发此事件(将等待 CSS 转换完成)​​。” 该代码可以工作,但看起来确实不太好。有没有办法进行某种循环?标准“for”不起作用:

var collapseNumber = jQuery.makeArray(document.getElementsByClassName("panel panel-default"));

for (var i = 0; i < collapseNumber.length; i++) {

  $('#collapse' + i).on('shown.bs.collapse', function () {
     $('#s' + i).goTo();  
   });
}

创建的数组用于获取实际的元素数量,我需要将其放入循环中。

最佳答案

您遇到的问题是 infamous for loop issue其中i 的值是最后一个值。但是,当可以使用简单的数据属性时,没有理由必须循环。

只需使用数据属性来选择和链接事物

<div data-goto="#s1">...</div>

和 JavaScript

$('[data-goto]').on('shown.bs.collapse', function () {
    var selector = $(this).data("goto");
    $(selector).goTo();  
});

关于Javascript:自动化功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40847973/

相关文章:

javascript - 如何将 javascript 变量值分配给文本框 - 在 PHP 中

javascript - 输入后如何更改textNodes中的所有文本

javascript - 如何使用 jQuery 过滤器选择器查找表标签 td 值

javascript - Selenium Webdriver - 元素未找到 Javascript 生成的菜单

javascript - $(document).ready() 似乎不适用于 Internet Explorer。我怎样才能解决这个问题?

javascript - Jquery:解析 HTML

javascript - 如何在一个函数的不同元素上使用两个事件?

jquery - 当我选中某个单选按钮时,如何自动设置输入文本

java - FileUpload isFormField() 在提交文件时返回 true

html - 如何使 iFrame 中的 DIV 对齐?