首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在html锚点上调用已经存在的jquery函数?

如何在html锚点上调用已经存在的jquery函数?
EN

Stack Overflow用户
提问于 2015-05-14 23:20:03
回答 2查看 82关注 0票数 1

我在几个具有唯一ids的div上使用jquery创建了可扩展的内容。代码正在工作,但现在我也希望使用锚从顶部导航中触发此函数。我试过几件事,但都没有用。我对jquery非常陌生,因此非常感谢您的帮助。

我专门尝试在每个锚点上调用click()函数。

以下是我的jquery:

代码语言:javascript
复制
(function($) {
    $(document).ready(function () {
        var panelspeed = 500; 
        var totalpanels = 6; 
        var defaultopenpanel = 0; 
        var accordian = true;  
        var panelheight = new Array();
        var currentpanel = defaultopenpanel;
    var iconheight = parseInt($('.icon-close-open').css('height'));
    var highlightopen = true;

    //Initialise collapsible panels
    function panelinit() {
            for (var i=1; i<=totalpanels; i++) {
                panelheight[i] = parseInt($('#cp-'+i).find('.expandable-panel-content').css('height'));
                $('#cp-'+i).find('.expandable-panel-content').css('margin-top', -panelheight[i]);
                if (defaultopenpanel == i) {
                    $('#cp-'+i).find('.icon-close-open').css('background-position', '0px -'+iconheight+'px');
                    $('#cp-'+i).find('.expandable-panel-content').css('margin-top', 0);
                }
            }
    }

    $('.expandable-panel-heading').click(function() {
        var obj = $(this).next();
        var objid = parseInt($(this).parent().attr('ID').substr(3,2));
        currentpanel = objid;
        if (accordian == true) {
            resetpanels();
        }

        if (parseInt(obj.css('margin-top')) <= (panelheight[objid]*-1)) {
            obj.clearQueue();
            obj.stop();
            obj.prev().find('.icon-close-open').css('background-position', '0px -'+iconheight+'px');
            obj.animate({'margin-top':0}, panelspeed);
            if (highlightopen == true) {
                $('#cp-'+currentpanel + ' .expandable-panel-heading').addClass('header-active');
            }
        } else {
            obj.clearQueue();
            obj.stop();
            obj.prev().find('.icon-close-open').css('background-position', '0px 0px');
            obj.animate({'margin-top':(panelheight[objid]*-1)}, panelspeed);
            if (highlightopen == true) {
                $('#cp-'+currentpanel + ' .expandable-panel-heading').removeClass('header-active');
            }
        }
    });

    function resetpanels() {
        for (var i=1; i<=totalpanels; i++) {
            if (currentpanel != i) {
                $('#cp-'+i).find('.icon-close-open').css('background-position', '0px 0px');
                $('#cp-'+i).find('.expandable-panel-content').animate({'margin-top':-panelheight[i]}, panelspeed);
                if (highlightopen == true) {
                    $('#cp-'+i + ' .expandable-panel-heading').removeClass('header-active');
                }
            }
        }
    }

   //Uncomment these lines if the expandable panels are not a fixed width and need to resize
   $( window ).resize(function() {
      panelinit();
    });

    $(window).load(function() {
        panelinit();
    }); //END LOAD
}); //END READY

})(jQuery);

可扩展的jquery内容的html是:

代码语言:javascript
复制
<div class="expandable-panel" id="cp-3">
    <div class="expandable-panel-heading">
        <h2>Testimonials<span class="icon-close-open"></span></h2>
     </div>
    <div class="expandable-panel-content">
        <p>Panel HTML...</p>
    </div>
</div>

我想要触发click()函数的html锚点是:

代码语言:javascript
复制
        <ul class="nav">
            <a href="#cp-1" onclick="$( "a" ).trigger( "click" );"><li class="nav">What is Justice Court Judge?</li></a>
            <a href="#cp-2"><li class="nav">About Reeves Jones</li></a>
            <a href="#cp-3"><li class="nav">Testimonials</li></a>
            <a href="#cp-4"><li class="nav">Polling Locations</li></a>
            <a href="#cp-5"><li class="nav">Map</li></a>
            <a href="#cp-6"><li class="nav">Contact</li></a>
        </ul>

提前感谢您的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-14 23:56:45

如果我正确理解,您不希望触发锚点的单击事件,而是希望在单击锚点时触发相应导航元素的单击事件。

可以通过在文档就绪函数中添加以下代码来做到这一点:

代码语言:javascript
复制
$('.nav a').click(function() {
    $($(this).attr('href')).find('.expandable-panel-heading').click();
});

此代码在<a>元素中的所有.nav元素上注册一个单击处理程序。它使用单击的<a>元素的<a>值来获取表示导航元素的jQuery对象。

在这种情况下,您不应该将"onclick“属性放置在<a>元素上。

顺便说一句:对于有效的HTML,您应该将<a>元素嵌套在<li>元素中,而不是反过来。

票数 0
EN

Stack Overflow用户

发布于 2015-05-14 23:22:02

我建议不要使用内联事件处理程序。

您可以在jquery代码中添加以下内容:

代码语言:javascript
复制
$(".nav").find('a').trigger("click");

$(".nav").find('a').click(function(){
    //your code
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30249042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档