Как передать выделенный текст флажка в результат действия на странице бритвы?

Я работаю над основной страницей бритвы asp.net. Я передаю выбранный идентификатор как успех массива

но моя проблема: выбранное текстовое значение для флажка не передано или не отображено

Проблема произошла на этой линии selectedClassText.push($(this).next('label').text());

когда результат действия отладки string[] classidsText отображает ноль.

Именно мне нужно передать выделенный текст рядом с флажком в виде массива.

Страница бритвы .cs, которая получает текст идентификатора класса

    public JsonResult OnGetSubAccountClassName(string[] classIds,string[] classidsText)
{
    var assetsSubAccountName = _IAssetsService.GetJdeAssetSubAccountClassName(classIds);
    AssetCountGeneration.JDEAssetSubAccountClassNameDetails = assetsSubAccountName;
    return new JsonResult(assetsSubAccountName);
}

из jQuery ajax на странице cshtml я отправляю выбранный отображаемый текст selectedClassText

    $(document).on('change', '.classCheckbox', function () {
      var selectedClassIds = [];
      var selectedClassText = [];
$('.classCheckbox:checked').each(function () {
    selectedClassIds.push($(this).val());
    selectedClassText.push($(this).next('label').text());
});
      console.info("selected items" + selectedClassIds)
      if (selectedClassIds.length > 0) {
          $.ajax({
              url: '?handler=SubAccountClassName',
              type: 'GET',
              traditional: true,
              data: { classIds: selectedClassIds,classidsText:selectedClassText },
              success: function (response) {
                  $('#subClassesList').empty();
                  $('#subClassesContainer').show();
                 
                  var subClassesContainer = $('<div data-class-id = "' + selectedClassIds + '"></div>');
                  $.each(response, function (i, item) {
                      $(subClassesContainer).append('<input type = "checkbox" class = "subclassCheckbox" name = "selectedSubClasses" value = "' + item.subClassAccountId + '" /> ' + item.subClassAccountName + '<br />');
                  });
                  $('#subClassesList').append(subClassesContainer);
              }
          });

Обновленный пост

Я пробую код ниже, но он не сработал, как решить эту проблему console.info() и это дает мне ноль

при создании списка флажков перед событием изменения

я создаю его, как показано ниже

$('#btnDisplay').click(function (event) {
      event.preventDefault();
      var dropdown = $('#accountclassname-select');
      dropdown.empty();
    
      $.ajax({
          url: '?handler=AccountClassName',
          type: "GET",
          dataType: "json",
          success: function (response) {
              $('#classesContainer').show();
              $('#classesList').html(''); // Clear existing classes
              $('#classesList').append('<input type = "checkbox" class = "classCheckbox" value = "0" /> All <br />');
              $.each(response, function (i, classes) {
                  $('#classesList').append('<input type = "checkbox" class = "classCheckbox" value = "' + classes.classAccountId + '" /> ' + classes.classAccountName + '<br />');
              });
             
          }
      });
  }); 

Важные заметки

У меня нет ярлыка, чтобы добавить на него текст

я создаю список, как показано ниже

$(subClassesContainer).append('<input type = "checkbox" class = "subclassCheckbox" name = "selectedSubClasses" value = "' + item.subClassAccountId + '" /> ' + item.subClassAccountName + '<br />');
                      });
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
0
0
88
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуйте вот так

Вы можете передать текст метки с настраиваемыми атрибутами на входе следующим образом:

<input type = "checkbox" class = "classCheckbox" value = "' + classes.classAccountId + '" data-label = "'+ classes.classAccountName +'"/> ' + classes.classAccountName + '<br />

После этого вы можете получить значение пользовательского атрибута (текста метки), подобное этому, в своем цикле и поместить его значение в массив.

var selectedText = $(this).attr("data-label");
selectedClassText.push(selectedText);

не работает, я проверяю console.info, не даю мне ничего, это дает мне ноль, я пытаюсь двумя способами, не получилось

ahmed abdelaziz 25.02.2024 09:54

Я только что отредактировал свой ответ, приведенный выше, вы можете воспользоваться его рекомендациями и сделать это в соответствии со своей бизнес-логикой.

Chirag Ashara 25.02.2024 15:16

Это, безусловно, сработает, но это все равно хуже, чем наличие метки для доступности и увеличение кликабельной области флажка. Мой ответ страдает от той же проблемы, потому что я для краткости опустил атрибут for, но определенно использую метку.

BenderBoy 25.02.2024 15:38

Важные заметки

У меня нет ярлыка, чтобы добавить на него текст

$(subClassesContainer).append('<input type = "checkbox" class = "subclassCheckbox" name = "selectedSubClasses" value = "' + item.subClassAccountId + '" /> ' + item.subClassAccountName + '<br />');

Я предполагаю, что item.subClassAccountName — это строка, в которую вы хотите вставить selectedClassText, если ее флажок установлен.

Поскольку он не находится внутри элемента, это излишне сложно. Поместите его в <label>, и ваш исходный код должен работать:

$(subClassesContainer).append('<input type = "checkbox" class = "subclassCheckbox" name = "selectedSubClasses" value = "' + item.subClassAccountId + '" /> <label>' + item.subClassAccountName + '</label><br />');

Потому что этот код ищет элемент, следующий сразу за флажком, но только если это метка.

selectedClassText.push($(this).next('label').text());

Он перестанет работать, если вы поместите что-нибудь между флажком и меткой.

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