У меня есть (это часть кода):

<select class="form-select" id="topicId" name="topicId" onchange="javascript:
                var data = $(':input[name]', '#dynamic-form').serialize();
                $.ajax(
                  'ajax.php/form/help-topic/' + this.value,
                  {
                    data: data,
                    dataType: 'json',
                    success: function(json) {                            
                        var eng1 = document.querySelectorAll('input[type="text"]');
                        eng1[eng1.length-1].style.display = 'none';
                    }
                  });">

Проблема в том, что input[type="text"] - кавычки вокруг типа text вызывают у меня серьезные проблемы, поскольку весь фрагмент кода уже заключен в "". Но как мне это решить? Есть идеи?

0
NiklasWideC 7 Окт 2020 в 23:28

2 ответа

Лучший ответ

Самое простое решение - извлечь код из атрибута onchange в функцию и вызвать функцию из атрибута.

function sendAjax() {
  var data = $(':input[name]', '#dynamic-form').serialize();
  $.ajax(
    'ajax.php/form/help-topic/' + this.value, {
      data: data,
      dataType: 'json',
      success: function(json) {
        var eng1 = document.querySelectorAll('input[type="text"]');
        eng1[eng1.length - 1].style.display = 'none';
      }
    });
}
<select class="form-select" id="topicId" name="topicId" onchange="sendAjax()">

Или вы можете привязать прослушиватель событий из JS без использования onchange.

$("#topicId").change(function() {
  var data = $(':input[name]', '#dynamic-form').serialize();
  $.ajax(
    'ajax.php/form/help-topic/' + this.value, {
      data: data,
      dataType: 'json',
      success: function(json) {
        var eng1 = document.querySelectorAll('input[type="text"]');
        eng1[eng1.length - 1].style.display = 'none';
      }
    });
});
<select class="form-select" id="topicId" name="topicId">

Если по какой-то причине вы должны поместить весь код в onchange, вы можете использовать одинарные кавычки вокруг имени вместо двойных кавычек. Вам нужно будет избегать их, потому что в селекторе используются одинарные кавычки.

<select class="form-select" id="topicId" name="topicId" onchange="javascript:
                var data = $(':input[name]', '#dynamic-form').serialize();
                $.ajax(
                  'ajax.php/form/help-topic/' + this.value,
                  {
                    data: data,
                    dataType: 'json',
                    success: function(json) {                            
                        var eng1 = document.querySelectorAll('input[type=\'text\']');
                        eng1[eng1.length-1].style.display = 'none';
                    }
                  });">

Наконец, вы просто используете $('input:text:last').hide().

1
Barmar 7 Окт 2020 в 20:38

Я не понимаю, почему бы просто не написать все это внутри <script> ..? но в любом случае вы можете заменить все одиночные теги (') на обратные, а затем изменить глобальные двойные теги (onchange="...") на одиночные.

0
ינון רחמים 7 Окт 2020 в 20:38