2009-12-29 99 views
0

此代碼無法按預期工作,我做錯了什麼?JQuery和點擊功能

$(document).ready(function(){ 
    $("a.hide-para").click(function(){ 
    $('p').hide(); 
    $(this).html('Show Paragraphs').removeClass('hide-para').addClass('show-para'); 
    }); 
    $("a.show-para").click(function(){ 
    $('p').show(); 
    $(this).html('Hide Paragraphs').removeClass('show-para').addClass('hide-para'); 
    }); 
}); 
+3

它在做什麼而不是打算做什麼? – 2009-12-29 21:47:40

回答

9

它不工作,因爲你是動態添加/刪除後級的元素被綁定到特定的元素/類組合。也就是說,在與該類別有任何關聯之前(或者其他方式取決於您的默認設置),您正將點擊事件添加到具有「show-para」類別的鏈接中

無論哪種情況, jQuery具有live函數來解決這個問題,只需將您的click處理程序更改爲.live('click', function(){ })

+0

好一個保羅,謝謝 – 2009-12-29 21:54:43

+0

我退休後回答這一個;) – 2009-12-29 21:56:02

-2

嘗試return false;單擊處理程序

+0

P.S.意圖是什麼? – czarchaic 2009-12-29 21:48:03

+0

他的點擊可能只有一種方式,所以返回false不會做任何事情。 – Jage 2009-12-29 21:51:11

+0

除非它跳到鏈接引用的頁面... – czarchaic 2009-12-29 22:00:45

4

您在修改DOM時正在丟失綁定。要麼停止改變的類名或綁定的事件使用live()

$('a.hide-para').live('click', function() { ... 
-1

我想這:

removeClass( '隱藏 - 對')addClass( '秀 - 對')

。是造成你的問題。

+1

不,刪除類不會刪除綁定。問題是它*不*刪除綁定並添加另一個。 – Guffa 2009-12-29 21:54:35

+0

啊 - 我站好了。該死的,我討厭它,當我錯了:( – OneNerd 2009-12-29 21:57:33

-1

如果你的點擊實際上是繼鏈接,而不是做你的事件調用,你可以做到以下幾點:

$("a.hide-para").click(function(evt){ 
    evt.preventDefault(); 
    // the rest is your code... 

這樣可以防止默認(鏈接如下動作)的發生......除了在IE6。

希望這會有所幫助。

0

假設你的類總是一開始就是「隱藏 - 對」,這應該工作:

$(document).ready(function() { 
    $("a.hide-para").click(function(){ 
     if($(this).hasClass('hide-para')){ 
      $('p').hide(); 
      $(this).html('Show Paragraphs').removeClass('hide-para').addClass('show-para'); 
     } else { 
      $('p').show(); 
      $(this).html('Hide Paragraphs').removeClass('show-para').addClass('hide-para'); 
     } 
    }); 
}); 
0

它將爲第一個變化工作,但之後它只是做同樣的改變一次。

事件在頁面加載時應用一次,更改類不會刪除並添加事件處理程序。

而不是使用隱蔽一個事件處理程序,一個用於展示,你可以使用一個做兩件事:

$(function() { 
    $("a.hide-para, a.show-para").click(function(e) { 
    if ($(this).hasClass('hide-para')) { 
     $('p').hide(); 
     $(this).html('Show Paragraphs').removeClass('hide-para').addClass('show-para'); 
    } else { 
     $('p').show(); 
     $(this).html('Hide Paragraphs').removeClass('show-para').addClass('hide-para'); 
    } 
    e.preventDefault(); 
    }); 
}); 

此外,呼籲preventDefault防止了點擊,即鏈接下面的默認操作。