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

时间:2014-01-09 21:34:22

标签: jquery function events onclick element

我正在尝试将点击事件与jQuery中的函数组合在一起但不知何故它只在第二次点击后才有效。

点击后,首先我需要将元素的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 http://jsfiddle.net/ASzTg/10/,您可以在第一次点击时看到浏览器控制台中的ID更改。然后第二次单击捕获scrollld脚本并完成其工作。从jsfiddle你可以看到我想要的东西,从导航栏链接点击很好地滚动所需的div到我想要的位置(或任何其他)。

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

希望这有助于我想要做的事情。如果您看到http://scrolldjs.com/#use,您可以看到触发器,这可能会解释这两个事件处理程序。希望这有助于找到正确的答案。

此致

1 个答案:

答案 0 :(得分:0)

你可以完全删除第二个事件处理程序 - 不需要将2个单击事件处理程序绑定到同一个元素

$('.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