2015-04-14 45 views
0

jquery我試圖添加一個'這個'當你點擊一個李,當你點擊'。這個'它不工作的類。jquery'點擊'不生成類

即使當我使用.on方法它不起作用。我錯過了什麼?這真讓我抓狂。

var thisLi = $('ul li'); 

$('li').on('click', function() { 
    $(thisLi).removeClass('that'); 
    $(thisLi).removeClass('this'); 
    $(this).addClass('this'); 
}); 


$('li.this').on("click", "li.this", function() { 
    $(this).addClass('that'); 
}); 

http://jsfiddle.net/zfda8145/2/

+0

我認爲,當你點擊li.this,第一次點擊的處理程序是要刪除「這個」類和第二li.this點擊處理程序永遠不會被調用。請參閱下面的答案。 – StephenCollins

回答

1

使用事件委派了點。因爲普通的事件綁定不會將事件綁定到未來的元素。爲此,您需要將事件綁定到特定的父級。在這裏,我正在使用document

$(document).on("click", "li.this", function() { 
    $(this).addClass('that'); 
}); 
+0

感謝它有幫助,但現在這兩個函數都在運行,(「click」,「li.this」,function(){('li.this')。addClass( '那個'); }); ()「(」click「,」li.this「,function(){ $(this).addClass('that'); }); 我應該使用if語句來檢查它是否具有類? – marksy

0

此snipplet應該做的伎倆。 首先你需要抓住ul元素 - 避免在ul中搜索shole DOM。 其次,你在它的元素:)

var thisLi = $('ul li'); 
    var list = $('ul'); 
    list.on('click','li', function() { 
     $(thisLi).removeClass('that'); 
     $(thisLi).removeClass('this'); 
     $(this).addClass('this'); 
    }); 


    list.on('click','li.this', function() { 
     $(this).addClass('that'); 
    }); 
0

申請click事件試試這個:

var thisLi = $('ul'); 

    $('li').on('click', function() { 
     $(thisLi).removeClass('that'); 
     $(thisLi).removeClass('this'); 
     $(this).addClass('this'); 
    }); 


    $(thisLi).on("click","li.this", function() { 
     $(this).addClass('that'); 
    });  

Working DEMO

0

你可以做這樣的事:

var thisLi = $('ul li'); 

$('li').on('click', function() { 
    if(this.className!=='this'){ 
    $(thisLi).removeClass('that'); 
    $(thisLi).removeClass('this'); 
    $(this).addClass('this'); 
    }else{ 
     $(this).addClass('that'); 
    } 
}); 
0

Ť當事件直接發生綁定元素上,但僅限於後代(內部元素)

https://api.jquery.com/on/

當您更改此

$('li.this').on("click", "li.this", function() 

到它的工作原理,他處理不叫這個:

$(document).on("click", "li.this", function() 

在這個邏輯中,你實際確定的範圍是click事件可以發生。如果使用$('li.this').on(),則僅考慮li.this的後代click事件,但li.this不存在後代。

0

我認爲問題是,當你點擊this.li時,它會觸發兩個函數,首先刪除類,然後不執行,因爲類已經消失。

我改寫它作爲一個功能,做班級檢查,而不是單獨的功能。我不太喜歡這個,但如果你被卡住了,它會讓你走。

$('li').on('click', function() {  

    if ($(this).hasClass('that')) { 
     $(this).removeClass('that');   
    } else if ($(this).hasClass('this')) { 
     $(this).addClass('that'); 
     $(this).removeClass('this'); 
    } else { 
     $(this).addClass('this'); 
    } 

}); 

這裏是工作提琴 - http://jsfiddle.net/zfda8145/24/