2017-09-02 3196 views
1

我有一個按鈕<button id="subs1">test</button>和一個divjQuery的 - .removeClass不起作用

<div class="subsystem subhide"> 
    <h3 style="text-align: center; font-size: 30px; font-weight: normal;">Electronics</h3> 
    <p>Lorem</p> 
</div> 

在CSS文件中的類.subhide被定義爲

.subhide { 
display: none; 
} 

和jQuery的代碼,我'試圖去工作是

jQuery('#subs1').on('click', function(){ 
jQuery('.subsystem').removeClass('subhide'); 
}); 

當點擊按鈕什麼都沒有發生,爲什麼?

在此先感謝!

+1

您可以檢查是否有錯誤還可以創建一個演示? – guradio

+1

子系統的作用是什麼?請添加子系統CSS請 – hamzox

+1

您是否包含jQuery庫? – Dekel

回答

1

問題是,jQuery('#subs1')找到具有該id的元素並綁定到它們。如果元素在綁定時沒有id,則不會處理事件。

附上DOM準備

爲了解決此問題,on document ready包裹代碼,這樣一來當你的DOM(文檔)已經準備好你的代碼將只執行。

在文檔「準備就緒」之前,不能安全地操作頁面。 jQuery爲您檢測到這種狀態。包含在$(document).ready()中的代碼只有在頁面文檔對象模型(DOM)準備好要執行JavaScript代碼時纔會運行。

一個更好的辦法

在另一方面,如果你的按鈕是動態添加,也不會在那裏當事件監聽器要進行綁定,所以代碼實際上將無能爲力。爲了解決這個問題,你的代碼更改爲以下:

jQuery(document.body).on('click', '#subs1', function() { 
    jQuery('.subsystem').removeClass('subhide'); 
}); 

此事件將被連接到document.body這是永遠存在的DOM樹。現在單擊主體時,無論按鈕連接到DOM的時間如何,事件都會傳播到#subs1

工作摘錄

這裏是一個工作示例:

$(document).ready(function() { 
 
    jQuery(document.body).on('click', '#subs1', function() { 
 
    jQuery('.subsystem').removeClass('subhide'); 
 
    }); 
 

 
    jQuery(document.body).on('click', '#subs2', function() { 
 
    jQuery('.subsystem').addClass('subhide'); 
 
    }); 
 
});
.subhide { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button id="subs1">Unhide</button> 
 
<button id="subs2">hide</button> 
 
<div class="subsystem subhide"> 
 
    <h3 style="text-align: center; font-size: 30px; font-weight: normal;">Electronics</h3> 
 
    <p>Lorem</p> 
 
</div>

+0

謝謝,但它仍然無法正常工作。如果我將你的代碼複製到jsfiddle中,它可以工作,但它不在我的網站上。我知道,jQuery的工作原理是有一些其他功能使用它的工作。猜猜這件事我都很失敗。 – Skydiver

+0

@Skydiver如果你可以鏈接一個片段,也許我可以幫助更多。 (在要點或東西上)。是從第一次加載屏幕上的按鈕?還是動態添加? – Bamieh

+0

那真的沒有什麼比它更多的了,js代碼在工作js代碼下面,css代碼在工作css代碼下面,div用於關閉標記。沒有其他包裝或附加功能。 – Skydiver

1

jQuery('#subs1').on('click', function(){ 
 
jQuery('.subsystem').removeClass('subhide'); 
 
}); 
 

 

 
jQuery('#toggle').on('click', function(){ 
 
jQuery('.subsystem').toggle('subhide'); 
 
});
.subhide { 
 
display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="subsystem subhide"> 
 
    <h3 style="text-align: center; font-size: 30px; font-weight: normal;">Electronics</h3> 
 
    <p>Lorem</p> 
 
</div> 
 
<button id="subs1">Button</button> 
 

 
<button id="toggle">Toggle Button</button>

您需要CLAS之外定義按鈕s

希望這個幫助!

1

試試:

,如果你使用Chrome,清除瀏覽器緩存。

1

在樣式表中,將其更改爲:

.subsystem.subhide {
display: none;
}

.subsystem {
display: anything;
}

它應該工作

+0

我不同意這個,默認是'display:block' for div由spec定義。你不應該添加冗餘代碼。也沒有必要增加類的特殊性'.subhide'就足夠了。 – Bamieh

+0

「display:anything;」不是有效的CSS。對於「顯示」屬性沒有「任何」選項。僅供參考;) –

0

我真的不知道爲什麼,但這個片段的工作原理:

jQuery(document).ready(function() { 
jQuery('#subs1') 
    .click(function(){ 
    jQuery('body').find('.subsystem').addClass('subhide')}) 
});