Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.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
Jquery 单击时将id分配给元素,然后运行scrolld.js函数_Jquery_Function_Events_Onclick_Element - Fatal编程技术网

Jquery 单击时将id分配给元素,然后运行scrolld.js函数

Jquery 单击时将id分配给元素,然后运行scrolld.js函数,jquery,function,events,onclick,element,Jquery,Function,Events,Onclick,Element,我试图将点击事件与jQuery中的函数结合起来,但不知何故,它只在第二次点击后才起作用 单击时,首先我需要将元素的id更改为给定的id,然后函数需要捕获具有更改id的元素并运行 不幸的是,我不能在这里使用类,所以我必须在单击时更改元素id $('.element').click(function() // here the element gets id "divBtn" {if(this.id){this.id = "divBtn";} // this is the function

我试图将点击事件与jQuery中的函数结合起来,但不知何故,它只在第二次点击后才起作用

单击时,首先我需要将元素的id更改为给定的id,然后函数需要捕获具有更改id的元素并运行

不幸的是,我不能在这里使用类,所以我必须在单击时更改元素id

$('.element').click(function()
// here the element gets id "divBtn"
    {if(this.id){this.id = "divBtn";}

// this is the function I need to run on the above first click
// this function is also the trigger to call scrolld.js (scrolldjs.com) so I am not sure if I
// can modify this part or not
    $("[id*='Btn']").stop(true).on('click',function(e)
        {e.preventDefault();                    
    $(this).scrolld();


});
}))

在第二行中,第一次单击将元素的id更改为“divBtn”。这可以在控制台中看到

但是,只有在第二次单击之后,函数才会捕获id为“divBtn”的元素并运行

我如何将此合并为一次单击

jQuery和学习的新功能,因此这一点可能非常明显。感谢您的帮助或意见。如果您有答案,如果您不介意,请评论您的代码或详细解释,因为我刚刚开始使用jQuery。多谢各位

编辑01:请注意,我需要在元素上运行的脚本/函数仅适用于id为且id末尾有“Btn”的元素,因此我需要为元素使用id。如果有可能摆脱第二次单击并运行该函数,我想就是这样

编辑02:这里有一个正在工作的jsfiddle,您可以在第一次单击时在浏览器控制台中看到id的更改。然后,第二次单击捕获滚动脚本并执行其工作。在jsfiddle中,您可以看到我试图获取的内容,单击导航栏链接可以很好地将所需的div滚动到我想要的位置(或任何其他位置)

Scrolld用于在单击任何导航栏链接后将内容包装器滚动到所需位置(顶部或任何其他位置)。因为Scrolld只接受一个id,所以我必须在单击时分配id,然后运行脚本

希望这有助于我的努力。如果您看到了触发器,这可能解释了这两个事件处理程序。希望这有助于找到正确答案


关于

您可以完全删除第二个事件处理程序-无需将两个单击事件处理程序绑定到同一元素

$('.element').click(function (e)  { // bind event handler to element/s
    e.preventDefault(); // prevent default action
    if (this.id) {
        this.id = "divBtn"; // add id if it doesn't have one
    }        
    $(this).scrolld(); // run your method
});

尽管如果您有多个
.element
元素,它们最终将使用相同的id,这是无效的HTML

这没有意义,事件处理程序内部的事件处理程序,在没有明显原因的情况下使用stop(),更改某个元素的id以使其与事件处理程序一起工作,在第二行,如果您将id设置为divBtn,为什么还要在下一行再次检查id是否为divBtn?另外,如果您将div id设置为“divBtn”,为什么要将click event绑定到id=“Btn”?它不是应该是$(“[id*='divBtn']”)吗?在('click',函数(e)上,该函数捕获结尾处id为“Btn”的所有元素,然后将视口滚动到该元素的顶部或所需的其他位置。由于我无法使函数与类一起工作,因此我必须为(锚定)元素分配“Btn”单击id,因为在html中不能有多个具有相同id的锚。触发器函数在scrolldjs.com中给出,并按原样使用。如果我可以修改它,那就太好了。很抱歉刚从jQuery开始的奇怪格式。@moderntimes您知道,id是唯一的。这意味着您不能对多个元素使用相同的id。所以您不能有多个id=“Div”的元素。使用[id*='Btn']也没有意义,因为您只能有一个id,您可以简单地使用$('Btn'))选择器。出于好奇,为什么不能使用类?显然,类当前存在,您必须将它们更改为id。我想我需要第二个单击事件处理程序,因为它检查单击的元素是否具有id“divBtn”然后在其上运行函数/script scrolld.js。仅在第二次单击后使用我的代码,函数/script才起作用,因为第一次单击时id发生了更改。尝试合并两个事件处理程序,并在对scrolldjs.com上获取的第二个初始化函数进行尽可能小的更改的情况下单击。是否可以显示标记并可能进行修改fiddle?这只是一个元素还是多个元素?那么有些元素已经有不同的ID了吗?我假设你可以使用委托来做你想做的事情,但是不清楚你的设置到底是什么如果你签出scrolldjs.com/#use你会看到触发器函数。对于一个演示,你可以查看srolldjs.com/demo/我想使用的是,当单击任何所需的元素时,div移动到指定的位置。因此基本上为一个目标分配多个锚。添加更多标记。添加JSFIDLE并希望您能看到我正在尝试做什么。基本上有一组带有类scrolld的链接。然后我单击这些链接,id…Btn被分配,是什么导致scrolld.js在链接上拾取并将目标id滚动到所需位置。新的JSFIDLE现在也可以工作。如果第一次更改id时单击,脚本将在第二次捕获id。现在这只需要一步。希望这有助于找到答复。感谢您仍然能够提供的任何帮助谢谢