嵌套字符串-3个级别-带引号

问题描述

我有这个(这是代码的一部分):

this.model = this.getConnection().getModel(collectionName);

问题是<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'; } });"> -类型为 text 的引号给我带来了严重的问题,因为整个代码段已经包装在“”中。 但是到底该如何解决呢? 有什么想法吗?

解决方法

最简单的解决方案是将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]',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,success: function(json) {                            
                        var eng1 = document.querySelectorAll('input[type=\'text\']');
                        eng1[eng1.length-1].style.display = 'none';
                    }
                  });">

最后,您只需使用$('input:text:last').hide()

,

我不明白为什么不将所有内容都写在<script> ..中?但是无论如何,您都可以将所有单个标签(')更改为backtag,然后将全局双标签(onchange="...")更改为单个标签。