JQuery onclick slideDown元素并且只更改id一次

时间:2014-01-27 12:54:15

标签: javascript jquery html css

我每次点击一个按钮时都会尝试显示一个新元素,这就是我想出的:

$(document).ready(function(e) {

    $('#addNew').click(function() {
        $('#D2').slideDown();
        this.id = '#addNew2';   
    });

    $('#addNew2').click(function() {
        $('#D3').slideDown();
        this.id = '#addNew3';   
    });

    $('#addNew3').click(function() {
        $('#D4').slideDown();
        this.id = '#addNew4';   
    });

});

这里还有一个小提琴http://jsfiddle.net/QZF4S/

第一次工作正常,但是ID会改变,但之后不起作用吗?

在此之前,我尝试使用if else语句检查元素是否为显示块,以及是否在点击时打开了下一个元素。但这有同样的问题,只能工作一次

任何帮助将不胜感激。

谢谢, 路加

3 个答案:

答案 0 :(得分:2)

问题在于你在追求你的功能。加载时,文档不包含辅助ID,因此#addNew2单击功能永远不会附加到链接,因为链接的ID在第一次单击事件中更改。

如果您知道它将是一定数量的项目,您可以嵌套事件。以下是此案例的更新小提琴:http://jsfiddle.net/Y6yHu/

如果您希望这是无限制的并添加用户想要的项目,则需要创建一个执行操作的独立功能,然后将此功能附加到您的addNew点击事件中,但保留ID相同。在辅助功能中,您可以检测添加的元素的数量,并根据存在的内容执行操作。

答案 1 :(得分:1)

DO

jQuery(document).ready(function(e) {

var arr=new Array('D1','D2','D3','D4');
var clickCount=0;

    jQuery('#addNew').click(function() {
            clickCount++;       
        $("#"+arr[clickCount]).slideDown();

   });
});

答案 2 :(得分:0)

事件处理程序仅绑定到当前选定的元素;在您的代码调用.click()

时,它们必须存在于页面上

在您的代码中,您正在更改元素的ID,click事件处理程序不知道动态创建的元素。

要处理此问题,您可以使用

$(document).on( eventName, selector, function () {
} ); // attaches event handler current set of matched element as well as dynamically created elements.

Working fiddle

参考.on