2016-10-02 10 views
0

私はページと2つのボタンにブロックを持っています。私は次のシナリオが欲しい:赤いブロックが既にページにあるので、 "Show red blocks"ボタンをクリックすると何も起こらない。 「緑色のブロックを表示」ボタンをクリックすると、緑色のブロック(大小)がページに表示されます(赤いブロックは消えます)。 "Show red blocks"ボタンをクリックすると、緑のブロックの代わりに赤いブロックが表示されます。jQueryをクリックしてコンテンツを変更する方法は?

コードが正しく動作せず、エラーが発生しています。私は問題が何かを管理することはできません。私はinnerHtmlについて読んだことがありますが、私の場合は役に立たないと思います。

$(document).ready(function() { 
 
    $('.btn-green').click(function showred() { 
 
    $('.block-green').toggleClass('show'); 
 
    $('.block-red').toggleClass('hide'); 
 
    }); 
 

 
    $('.btn-green').click(function showgreen() { 
 
    $('.block-green-small').toggleClass('show'); 
 
    $('.block-red-small').toggleClass('hide'); 
 
    }); 
 

 

 
    $('.btn-red').click(function() { 
 
    $('.block-green').toggleClass('hide'); 
 
    $('.block-red').toggleClass('show'); 
 
    }); 
 

 
    $('.btn-red').click(function() { 
 
    $('.block-green-small').toggleClass('hide'); 
 
    $('.block-red-small').toggleClass('show'); 
 
    }); 
 

 
});
.container-large { 
 
    max-width: 800px; 
 
    height: 200px; 
 
    margin: 10px auto 10px; 
 
    padding: 5px; 
 
    border: 1px solid #000; 
 
} 
 
.container-small { 
 
    max-width: 200px; 
 
    height: 200px; 
 
    margin: 10px auto 10px; 
 
    padding: 5px; 
 
    border: 1px solid #000; 
 
} 
 
p { 
 
    text-align: center; 
 
} 
 
.btn-red { 
 
    margin-bottom: 5px; 
 
} 
 
.btn { 
 
    width: 200px; 
 
    height: 30px; 
 
    border: 1px solid black; 
 
    border-radius: 7px; 
 
    font-family: sans-serif; 
 
    color: #fff; 
 
    text-align: center; 
 
} 
 
.btn-red { 
 
    background-color: red; 
 
} 
 
.btn-green { 
 
    background-color: green; 
 
} 
 
.block-red { 
 
    width: 100%; 
 
    height: 200px; 
 
    background-color: red; 
 
    display: block; 
 
} 
 
.block-green { 
 
    width: 100%; 
 
    height: 200px; 
 
    background-color: green; 
 
    display: none; 
 
} 
 
.block-red-small { 
 
    height: 200px; 
 
    background-color: red; 
 
    display: block; 
 
} 
 
.block-green-small { 
 
    height: 200px; 
 
    background-color: green; 
 
    display: none; 
 
} 
 
.show { 
 
    display: block; 
 
} 
 
.hide { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 

 
<div class="btn btn-red" onclick="showgreen()">Show red blocks</div> 
 
<div class="btn btn-green" onclick="showred()">Show green blocks</div> 
 

 
<p>Large blocks:</p> 
 
<div class="container-large"> 
 
    <div class="block-red"></div> 
 
    <div class="block-green"></div> 
 
</div> 
 

 
<p>Small blocks:</p> 
 
<div class="container-small"> 
 
    <div class="block-red-small"></div> 
 
    <div class="block-green-small"></div> 
 
</div>

+0

スニペットを実行します。エラーは何が間違っているかを正確に教えてくれます。 – Turnip

+0

Javascriptのスコープについて学ぶ必要があります。関数 'showRed'と' showGreen'を別の関数の中に定義しました。これにより、それらはローカルで利用できるようになりますが、グローバルには利用できなくなります。あなたの関数を '$(document).ready()' - ハンドラーの外に定義すると、それが動作します。 – connexo

答えて

1

あなたが存在しない関数を呼び出しているので、あなたは、エラーが表示されます。

あなたはまた、他のこのような場合には、両方のボタンを toggleClassを使用するべきではありません

onclick="showgreen()"

両方の色を隠すか表示します。

また、イベントリスナーの一部を組み合わせて、click()の2つだけが必要になる場合もあります。

簡体例:

$(document).ready(function() { 
 
    $('.btn-green').click(function showred() { 
 
    $('.block-green, .block-green-small').addClass('show').removeClass('hide'); 
 
    $('.block-red, .block-red-small').addClass('hide').removeClass('show'); 
 
    }); 
 

 
    $('.btn-red').click(function() { 
 
    $('.block-red, .block-red-small').addClass('show').removeClass('hide'); 
 
    $('.block-green, .block-green-small').addClass('hide').removeClass('show'); 
 
    }); 
 

 
});
.container-large { 
 
    max-width: 800px; 
 
    height: 200px; 
 
    margin: 10px auto 10px; 
 
    padding: 5px; 
 
    border: 1px solid #000; 
 
} 
 
.container-small { 
 
    max-width: 200px; 
 
    height: 200px; 
 
    margin: 10px auto 10px; 
 
    padding: 5px; 
 
    border: 1px solid #000; 
 
} 
 
p { 
 
    text-align: center; 
 
} 
 
.btn-red { 
 
    margin-bottom: 5px; 
 
} 
 
.btn { 
 
    width: 200px; 
 
    height: 30px; 
 
    border: 1px solid black; 
 
    border-radius: 7px; 
 
    font-family: sans-serif; 
 
    color: #fff; 
 
    text-align: center; 
 
} 
 
.btn-red { 
 
    background-color: red; 
 
} 
 
.btn-green { 
 
    background-color: green; 
 
} 
 
.block-red { 
 
    width: 100%; 
 
    height: 200px; 
 
    background-color: red; 
 
    display: block; 
 
} 
 
.block-green { 
 
    width: 100%; 
 
    height: 200px; 
 
    background-color: green; 
 
    display: none; 
 
} 
 
.block-red-small { 
 
    height: 200px; 
 
    background-color: red; 
 
    display: block; 
 
} 
 
.block-green-small { 
 
    height: 200px; 
 
    background-color: green; 
 
    display: none; 
 
} 
 
.show { 
 
    display: block; 
 
} 
 
.hide { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 

 
<div class="btn btn-red" >Show red blocks</div> 
 
<div class="btn btn-green">Show green blocks</div> 
 

 
<p>Large blocks:</p> 
 
<div class="container-large"> 
 
    <div class="block-red"></div> 
 
    <div class="block-green"></div> 
 
</div> 
 

 
<p>Small blocks:</p> 
 
<div class="container-small"> 
 
    <div class="block-red-small"></div> 
 
    <div class="block-green-small"></div> 
 
</div>

0

あなたは、のonclick jqueryのそれとjavascript onclickイベントを定義する必要を使用していません。 javascript onclickイベントに関数名showred()を定義しましたが、そのような名前の関数がないため、エラーが発生します。

ブロックを表示または非表示にするには、jquery .show()および.hide()関数を使用して、1つのセレクタでclickイベントを1回だけ定義します。

$(document).ready(function() { 
 
    $('.btn-green').click(function() { 
 
    $('.block-green').show(); 
 
    $('.block-red').hide(); 
 
    }); 
 

 

 

 
    $('.btn-red').click(function() { 
 
    $('.block-green').hide(); 
 
    $('.block-red').show(); 
 
    
 
    }); 
 

 
    
 

 
});
.container-large { 
 
    max-width: 800px; 
 
    height: 200px; 
 
    margin: 10px auto 10px; 
 
    padding: 5px; 
 
    border: 1px solid #000; 
 
} 
 
.container-small { 
 
    max-width: 200px; 
 
    height: 200px; 
 
    margin: 10px auto 10px; 
 
    padding: 5px; 
 
    border: 1px solid #000; 
 
} 
 
p { 
 
    text-align: center; 
 
} 
 
.btn-red { 
 
    margin-bottom: 5px; 
 
} 
 
.btn { 
 
    width: 200px; 
 
    height: 30px; 
 
    border: 1px solid black; 
 
    border-radius: 7px; 
 
    font-family: sans-serif; 
 
    color: #fff; 
 
    text-align: center; 
 
} 
 
.btn-red { 
 
    background-color: red; 
 
} 
 
.btn-green { 
 
    background-color: green; 
 
} 
 
.block-red { 
 
    width: 100%; 
 
    height: 200px; 
 
    background-color: red; 
 
    display: block; 
 
} 
 
.block-green { 
 
    width: 100%; 
 
    height: 200px; 
 
    background-color: green; 
 
    display: none; 
 
} 
 
.block-red-small { 
 
    height: 200px; 
 
    background-color: red; 
 
    display: block; 
 
} 
 
.block-green-small { 
 
    height: 200px; 
 
    background-color: green; 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 

 
<div class="btn btn-red" >Show red blocks</div> 
 
<div class="btn btn-green" >Show green blocks</div> 
 

 
<p>Large blocks:</p> 
 
<div class="container-large"> 
 
    <div class="block-red"></div> 
 
    <div class="block-green"></div> 
 
</div> 
 

 
<p>Small blocks:</p> 
 
<div class="container-small"> 
 
    <div class="block-red-small"></div> 
 
    <div class="block-green-small"></div> 
 
</div>

+0

「緑色のブロックを表示」をクリックすると白くなります – DelightedD0D

+1

編集したコードを見てください。簡単です –

0

あなたのクラス名ビットを変更する場合は、以下のようなもので、これは非常に単純で短くすることができます。

$(document).ready(function() { 
 
    $('.change-color').click(function() { 
 
     $(this).hasClass('red') ? 
 
      $('.container .block').addClass('red').removeClass('green'): 
 
      $('.container .block').addClass('green').removeClass('red'); 
 
      
 
    }); 
 
});
.container { 
 
    max-width: 800px; 
 
    height: 200px; 
 
    margin: 10px auto 10px; 
 
    padding: 5px; 
 
    border: 1px solid #000; 
 
} 
 
.container.small { 
 
    max-width: 200px; 
 
} 
 
p { 
 
    text-align: center; 
 
} 
 
.btn.red { 
 
    margin-bottom: 5px; 
 
} 
 
.btn { 
 
    width: 200px; 
 
    height: 30px; 
 
    border: 1px solid black; 
 
    border-radius: 7px; 
 
    font-family: sans-serif; 
 
    color: #fff; 
 
    text-align: center; 
 
} 
 
.block{ 
 
    width: 100%; 
 
    height: 200px; 
 
} 
 
.red{ 
 
    background-color: red; 
 
} 
 
.green { 
 
    background-color: green; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<div class="btn red change-color">Show red blocks</div> 
 
<div class="btn green change-color">Show green blocks</div> 
 

 
<p>Large blocks:</p> 
 
<div class="container large"> 
 
    <div class="block red"></div> 
 
</div> 
 

 
<p>Small blocks:</p> 
 
<div class="container small"> 
 
    <div class="block red"></div> 
 
</div>

関連する問題