2016-05-15 85 views
1

此問題的變體已被問到,但似乎大部分都是使用toggle()方法解決的。我的情況不同,hide()show()應該由兩個不同的事件驅動,即創建新遊戲和遊戲勝出。我不希望每個事件只做一件事,所以toggle()將不合適。jQuery hide()在show()之後不起作用(),反之亦然

我使用socket.io在服務器和瀏覽器之間進行通信。一切都適合開始。問題在於在上一場比賽獲勝後試圖開始新的比賽。相關的JavaScript看起來是這樣的:

$(document).ready(function() { 
    socket.on('gameOver', function() { 
     $('.yourStatus').hide(700); 
     $('.winner').show(700); 
    }); 
    $('button.newGame').on('click', function() { 
     $('.winner').hide; 
     $('.yourStatus').show; 
    }); 
}); 

所有事情都像當遊戲通過socket.io事件結束時一樣工作。除了hide()show()之外,按鈕點擊事件功能中的其他所有功能都可以正常工作。

我相信這樣做的答案會令人尷尬地簡單。

+1

'$('。winner')。hide'因爲忘記了'()'而沒有調用函數'hide'。它應該是'$('。winner')。hide()'和'show'是一樣的。 –

+0

我們都需要提出問題,有時候答案很尷尬! :) – dewd

回答

1

你應該用括號(調用函數):

$(document).ready(function() { 
    socket.on('gameOver', function() { 
     $('.yourStatus').hide(700); 
     $('.winner').show(700); 
    }); 
    $('button.newGame').on('click', function() { 
     $('.winner').hide(); 
     $('.yourStatus').show(); 
    }); 
}); 

性能提示(五言的,如果它是可能的 - 元素可以在DOM是唯一的):

更好,如果你宣佈你'.winner'與散列。例如:<div id="winner"/>並在分隔符jQuery中使用:$("#winner")

+1

對於像'click'或'gameOver'這樣低的速度發生的事件,不會有明顯的性能優勢(對於高頻事件,最好緩存選擇器的結果)。但是如果一個元素是唯一的,那麼使用唯一標識符確實是一個好主意。 –

+0

@ t.niese是的,我添加了括號:「當然如果可能的話」 - 這意味着如果元素在DOM中是唯一的。感謝您的建議。我要更改說明 – W92

+1

對不起,這是一個誤解,我認爲可以在那裏使用id,因爲'yourStatus'和'winner'聽起來很安靜。這個評論更多的是'Perrformance tip',因爲這聽起來像在一個低頻事件的回調中使用_class selector_有一個顯着的表現,然後是_id selector_。 –