Я пытаюсь "переключать" информацию, отображаемую после нажатия кнопки. У меня есть несколько кнопок, которые при каждом щелчке нажимают, я хочу либо показать, либо скрыть блок текста.
К сожалению, прямо сейчас, когда я нажимаю одну кнопку, она отображает или скрывает ВСЕ текстовые блоки вместо одного.
Это первый сценарий, который я когда-либо писал самостоятельно, поэтому, пожалуйста, извините меня, если я использую неправильный синтаксис, но это то, что я мог выяснить, было необходимо использовать вместо переключения (поскольку он устарел).
Вот мой сценарий:
<asp:Content ID="Content2" ContentPlaceHolderID="headCustomScriptsCSS" runat="server">
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script>
$(document).ready(function (e) {
$('button').click(function () {
if ($(this).hasClass("clicked")) {
$('p').show();
$(this).removeClass("clicked");
} else {
$('p').hide();
$(this).addClass("clicked");
}
});
});
</script>
</asp:Content>
Некоторые из моих HTML-кода:
<asp:Content ID="Content3" ContentPlaceHolderID="cpMainContent" runat="server">
<h1>
Add a New Application</h1>
<h3>
General Description</h3>
<div>
<div class="column-left">
<label for="EnglishShortName">
English Short Name</label>
</div>
<div class="column-center">
<input type="text" name="EnglishShortName" />
</div>
<div class="column-right">
<button type="button" class="myButton">
?</button>
</div>
<div class="help">
<p>
This is the paragraph to end all paragraphs. You should feel lucky to have seen such a paragraph in your life. Congratulations! </p>
</div>
</div>
<div>
<div class="column-left">
<label for="FrenchShortName">
French Short Name</label>
</div>
<div class="column-center">
<input type="text" name="FrenchShortName" />
</div>
</div>
<div>
<div class="column-left">
<label for="ApplicationCode">
Application Code</label>
</div>
<div class="column-center">
<input type="text" name="ApplicationCode" /><br />
</div>
<div class="column-right">
<button type="button" class="myButton">
?</button>
</div>
<div class="help">
<p>
This is a paragraph much like the last one. It is a paragraph to end all paragraphs. You should feel lucky to have seen such a paragraph in your life. Congratulations! </p>
</div>
</div>
...
и некоторые из моих CSS:
.column-left
{
text-align: right;
float: left;
width: 30%;
padding-top: 10px;
padding-bottom: 10px;
padding-right: 5px;
}
.column-right
{
float: right;
width: 20%;
}
.column-center
{
display: inline-block;
width: 46%;
padding-top: 10px;
padding-bottom: 10px;
}
.help
{
width: 50%;
margin-left:25%;
border:1px dotted black;
text-align:justify;
}
У меня есть еще несколько кнопок, которые отображают и скрывают текст. Мой вопрос: как я могу обработать событие отдельно для каждой кнопки? Нужно ли писать несколько сценариев?
Заранее спасибо!
Когда вы это сделаете:
$('p').show();
Вы получаете все элементы p и показываете их.
Но для того, чтобы сделать то, что вам нужно, вам нужно перейти, чтобы получить правильный элемент помощи.
Быстрый способ исправить ваш код - это просто изменить две строки: 1
$('p').show();
от
$(this).parent().next().show();
2
$('p').hide();
от
$(this).parent().next().hide();
Он будет делать то, что вы хотите.
Попробуй это
$('button').click(function () {
pParent = $(this).parent().siblings(".help");
if ($(this).hasClass("clicked")) {
$('p',pParent).show();
$(this).removeClass("clicked");
} else {
$('p',pParent).hide();
$(this).addClass("clicked");
}
});
$('p').show()
найдет ВСЕ теги<p>
в вашем документе. Если вам нужен только один (или несколько), связанный с фактическим кликом, вам придется сузить область поиска.$('p')
возвращает всеp
элементов на странице, поэтому$('p').show();
говорит "показать все элементы P на странице". Вы должны сделать некоторый обход дерева DOM.