私はそれに正解します:
私がする必要があるのは、ボタンを押すだけで特定のdivを非表示にすることです。これはトグルであるはずなので、基本的には、1回押すと非表示になり、もう一度押すと表示され、もう一度押すと非表示になります。
非表示/表示ルールをCSSで実行し、相互作用を純粋なjavascriptで実行する必要があります(jqueryは使用しないでください)。これが私がしなければならないことですが、javascriptコードを実行する方法がよくわかりません。
html:
<p class="button">Show/hide<p>
<div> I want to hide this by pressing the button above</div>
css:
#showhide {
display: none;
}
.button {
display: block;
height: 30px;
width: 100px;
background: green;
text-align: center;
padding-top: 10px;
padding-left: 0px;
font: 15px arial bold;
border: 1px solid black;
text-decoration: none;
list-style:none;
margin: 10px 0px 10px 0px;
}
また、この質問がここに属していない、または愚かであると思われる場合は、失礼なことは控えてください。私はここで学習しようとしています。
onclick
メソッドを使用できます。 HTMLを次のようにします。
<p class="button" onclick="toggle_visibility('hideMe')">Show/hide</p>
<div id="hideMe">I want to hide this by pressing the button above</div>
そして、次のJavaScriptがあります。
function toggle_visibility(id)
{
var e = document.getElementById(id);
if (e.style.display == 'block' || e.style.display=='')
{
e.style.display = 'none';
}
else
{
e.style.display = 'block';
}
}
HTMLタグ内で「onclick」属性を使用するだけの代替ソリューション:
<!DOCTYPE html>
<html>
<head>
<script>
function toggle(){
var div = document.getElementById("divSection");
if (div.style.display =='block'){
div.style.display = 'none';
return;
}
div.style.display ='block';
}
</script>
</head>
<body>
<p>Click the button to trigger a function.</p>
<p class="button" onclick="toggle()">Show/hide</p>
<div id='divSection'> I want to hide this by pressing the button above</div>
</body>
</html>
お役に立てば幸いです。
これは、ネイティブブラウザメソッドで動作し、単純なトグルコンポーネントを実装するコードの更新されたJSFiddleです http://jsfiddle.net/fyUJc/31/
var button = document.querySelector('.button');
button.addEventListener('click', function(event) {
var target = document.querySelector(button.getAttribute('data-target'));
if (target.style.display == "none") {
target.style.display = "block";
button.innerHTML = button.getAttribute('data-shown-text');
} else {
target.style.display = "none";
button.innerHTML = button.getAttribute('data-hidden-text');
}
});
トグルボタンを作成すると、GUIのフィールドに入りますが、これは非常に複雑です。
現在のブラウザテクノロジは、GUIで処理する必要があるすべてのことを支援する豊富なツールセットを提供していません。 GUIは、DOMの操作よりもコンポーネントと状態の処理に重点を置いているため、jQueryも役に立ちません。
上記のコードがChromeで機能する場合でも、DOMとイベントの両方でブラウザーの違いに注意する必要があり、コンポーネントのより良い抽象化が必要になります。私のコードでは対処されていない問題がかなりたくさんあり、毎回最初から書くと正しく対処するのが非常に困難になります。のようなもの:
一般的な問題の解決策を提供するUI関連のライブラリまたはフレームワークを調べることを強くお勧めします。いくつか例を挙げると、ReactJS、Dojo、またはSencha(ExtJSなど)を参照してください。ウィジェット/コンポーネントのライフサイクルを定義するフレームワークと、カスタムのライフサイクルを拡張および定義する方法を探します。
ブラウザテクノロジは、UIコンポーネントを作成するための適切な抽象化を提供しません。
以下に示すように、イベントリスナーをP
タグに追加し、Toggle()
関数を呼び出して表示値を交換することができます。
ここでの例- JSFiddle
function Toggle() {
var div = document.getElementsByTagName('div')[0];
if (div.style.display == 'none') {
div.style.display = 'block';
} else {
div.style.display = 'none';
}
}
(function () {
var button = document.querySelectorAll(".button");
for (var i = 0; i < button.length; i++) {
if (button[i].addEventListener) {
button[i].addEventListener("click", function () {
Toggle();
});
} else {
button[i].attachEvent("click", function () {
Toggle();
});
}
}
})();
ただし、要素を参照しやすくするために、要素にIDs
を追加することをお勧めします。