Как скрыть/показать вещи в соответствии со статусом флажка?

Я делаю blazor - приложение на стороне сервера и использую С# и HTML (не грязный blazor). Я хочу, чтобы в этой анкете была растущая форма. Когда этот флажок установлен, я хочу, чтобы средство выбора даты появлялось. В настоящее время у меня есть:

   <label for = "footballcheck">Have you been to a football match in the last year?</label>
        <input type = "checkbox" id = "footballcheck" name = "footballcheck" onclick = "CheckChanged()">
      
        <label for = "footballcheck">When did you go?</label>
        <input type = "date" id = "matchdate" name = "matchdate">


@code {
  private void CheckChanged()
    {
        var checkbox = footballcheck;
        if (checkbox.checked == true)  // If the checkbox is checked, display the date picker
        {
          matchdate.show;
        }
        else
        {
          matchdate.hide;
        }
    }
}

Как обращаться к компонентам? Я делаю это по удостоверению личности? Я видел, как люди используют document.GetByName, но у меня это не работает.

например

private void CheckChanged()
    {
        var checkbox = document.getElementById('footballcheck');
      
        if (checkbox.checked == true)  // If the checkbox is checked, display the date picker
        {
           matchdate.show;
        }
        else
        {
           matchdate.hide;
        }
    }

Я не уверен, куда идти отсюда ..

Какую версию блазора вы используете? Не могли бы вы попробовать onclick = "CheckChanged" (без фигурных скобок ())? Загляните и сюда: stackoverflow.com/questions/49947790/…

nilsK 02.02.2023 15:28

Извините, я не знаю, как проверить мою версию blazor?

Imogen 02.02.2023 15:36

Вы находитесь в blazor, чтобы указать, что вы хотите общаться на С# внутри вашего HTML-кода, вам нужно использовать @. Во-вторых, вы должны указать обработчик, а не выполнение функции: onclick = "CheckChanged()" => @onclick = "CheckChanged". Чтобы прочитать состояние флажка, отметьте @bind.

T.Trassoudaine 02.02.2023 16:01

Узнайте больше о том, как работает Blazor (Blazor + Razor + c# + SignalR + JS). Вы не можете просто использовать Javascript, как на любом обычном веб-сайте.

T.Trassoudaine 02.02.2023 16:06
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
73
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Не уверен, что это вариант для вас, но это можно сделать полностью в CSS с помощью селектора :checked в сочетании с общим родственным комбинатором (~)

Во-первых, вы скрываете средство выбора даты, например, с помощью свойства display:

#matchdate {
    display: none;
}

Затем вы применяете display: block только тогда, когда установлен флажок:

#footballcheck:checked ~ #matchdate {
    display: block;
}

Почему мы используем ~, общий комбинатор братьев и сестер здесь?
Просто потому, что между флажком и средством выбора даты есть еще одна метка, и мы не можем выбрать ее никакими другими комбинаторами.

Что насчет ярлыка, как его спрятать? Либо примените одни и те же стили для метки и ввода, либо поместите их в другой контейнер и выберите, используя смежный комбинатор (+)



Также небольшой рабочий пример, обратите внимание, что я изменил атрибут for для второй метки на for = "matchdate", поскольку он предназначен для средства выбора даты, а не для флажка:

/* basic styling, you can ignore it */
form {
  display: flex;
  flex-direction: column;
}

/* hide the datepicker */
label[for = "matchdate"],
#matchdate {
  display: none;
}

/* show datepicker when checkbox checked */
#footballcheck:checked + label[for = "matchdate"], /* remove this line if the label should not be hidden */
#footballcheck:checked ~ #matchdate {
  display: block;
}
<form>
  <label for = "footballcheck">Have you been to a football match in the last year?</label>
  <input type = "checkbox" id = "footballcheck" name = "footballcheck" onclick = "CheckChanged()">

  <label for = "matchdate">When did you go?</label>
  <input type = "date" id = "matchdate" name = "matchdate">
</form>

Даже если это работает, это своего рода цель Blazor для обработки рендеринга. Если вы собираетесь обрабатывать все в логике JS и CSS. Возможно, ему придется подумать об использовании чего-то другого, кроме Blazor.

T.Trassoudaine 02.02.2023 16:15
Ответ принят как подходящий
<input type = "checkbox" @bind = "checkboxValue" /> Show date picker

<div class = "form-group" style = "display:@(checkboxValue ? "block" : "none")">
    <label for = "startDate">Start date:</label>
    <input type = "date" @bind = "startDate" />
</div>

@code {
    private bool checkboxValue;
    private DateTime startDate;
}

Я протестировал, и у меня это работает. Этот фрагмент кода написан с синтаксисом Razor, где C# представляет собой флажок и средство выбора даты. Флажок привязывается к логическому значению с именем «checkboxValue» с помощью директивы «@bind», которая обеспечивает двустороннюю привязку между флажком и значением в коде позади.

Div с классом «form-group» отображает средство выбора даты, только когда установлен флажок. Средство выбора даты привязано к значению «startDate» с помощью директивы «@bind».

Блок кода внизу — это код компонента Razor. Он объявляет два закрытых поля: «checkboxValue» и «startDate», которые используются в компоненте Razor для управления значениями флажка и средства выбора даты.

Пожалуйста, будьте добры и поставьте лайк, хорошо

LightningBits 02.02.2023 22:17

Код — хорошее объяснение, объяснение — еще лучше. Но вот +1. Добро пожаловать в СО!

nilsK 03.02.2023 11:07

Пожалуйста, добавьте описание к вашему ответу, пожалуйста, прочитайте Как ответить

Greg-- 04.02.2023 18:35

Другие вопросы по теме