【问题标题】:JavaScript AND (&&) operator giving illegal character error, then another errorJavaScript AND (&&) 运算符给出非法字符错误,然后是另一个错误
【发布时间】:2015-05-02 16:04:42
【问题描述】:

我正在构建一个代码块并遇到了一个问题,这让我很好奇为什么 & 符号不会从 WordPress 文本编辑器视图中编码。此代码按预期工作,当它通过文本编辑器直接嵌入页面时,为我提供了我正在寻找的警报:

// This code works as expected
<script>
jQuery(document).ready(function() {
    if (jQuery('select[name=idx-q-PropertyTypes]:first').val()=='') {alert ('it exists');} else {alert ('cant find it');} 
    jQuery('.dsidx-resp-area-submit input').click(function(e){
        alert ("you clicked it");
        if (jQuery('select[name=idx-q-PropertyTypes]:first').val()=='') {
            alert ('There were no search parameters.');
            e.preventDefault();
        }
    });
});
</script>

接下来我想做的是检查条件的并发性。所以我把代码改成这样:

// This code gives errors 
<script>
jQuery(document).ready(function() {
    if (jQuery('select[name=idx-q-PropertyTypes]:first').val()=='') {alert ('it exists');} else {alert ('cant find it');} 
    jQuery('.dsidx-resp-area-submit input').click(function(e){
        alert ("you clicked it");
    if (
        jQuery('select[name=idx-q-PropertyTypes]:first').val()=='' &&
        jQuery('select[name=idx-q-Cities]:first').val()=='' &&
        jQuery('input[name=idx-q-PriceMin]:first').val()=='' &&
        jQuery('input[name=idx-q-PriceMax]:first').val()=='' &&
        jQuery('select[name=idx-q-BedsMin]:first').val()=='' &&
        jQuery('select[name=idx-q-BathsMin]:first').val()=='' &&
        jQuery('input[name=idx-q-ImprovedSqFtMin]:first').val()==''
    ) {
        alert ('There were no search parameters.');
            e.preventDefault();
        }
    });
});
</script>

我最初得到的错误是我使用了非法字符。当我在调试器中查找时,它是双&符号。他们显示为&amp;#038;。所以,接下来我尝试将它们全部替换为&amp;amp;,但没有奏效。像这样替换它们之后,我收到一个新错误,说条件语句缺少右括号。为了解决这个问题,我尝试在末尾添加一个括号,将每个条件括在一组括号中,然后将整个条件写在一行上,每个条件依次写,但没有一个有效。我还按照this question 的建议将其插入小提琴,但这也不起作用。像这样替换它们之后,我收到一个新错误,说条件语句缺少右括号。为了解决这个问题,我尝试在末尾添加一个括号,将每个条件括在一组括号中,然后将整个条件写在一行上,依次写下,但都不起作用。

当我作为外部文件链接到脚本时,& 符号正确编码并且整个脚本工作。有谁知道为什么会这样,如果我想像我最初尝试的那样嵌入脚本,是否有任何方法可以解决这个问题?

【问题讨论】:

  • 该文本编辑器可能会将&amp;amp; 编码为&amp;#038;。它有“原始文本”设置吗?
  • 如果是 XHTML,您需要使用 &amp;amp; 转义 & 字符。
  • chRyNan,我不明白什么吗?我尝试这样做的方式是否不正确(只需将每个 &amp;amp; 替换为 &amp;amp;)?
  • Cerbrus,该文本编辑器是 TinyMCE 的标准 WordPress 安装。我总是以我知道的最简洁的方式运行它,即选择“文本”选项卡而不是“视觉”选项卡。
  • 如果文本编辑器不允许您在 JavaScript 中包含 &amp;amp; 字符,那么它就是不适合这项工作的工具。

标签: javascript wordpress tinymce


【解决方案1】:

因此,您需要在 CDATA 中编写脚本,但如果您不想这样做,如果您不想更改代码,请执行此操作。

var val=jQuery('select[name=idx-q-PropertyTypes]:first').val() +
    jQuery('select[name=idx-q-Cities]:first').val() +
    jQuery('input[name=idx-q-PriceMin]:first').val() +
    jQuery('input[name=idx-q-PriceMax]:first').val() +
    jQuery('select[name=idx-q-BedsMin]:first').val() +
    jQuery('select[name=idx-q-BathsMin]:first').val() +
    jQuery('input[name=idx-q-ImprovedSqFtMin]:first').val();
if (val=="") ...

替代方案:

var isEmpty = $('[name^=idx-q]:first')
            .filter(
              function() { 
                return $(this).val() != ""; 
              }
            )
            .length==0;

【讨论】:

  • 我也尝试过 CDATA 标签,但它们不起作用。不过,我喜欢你提出的这个解决方案。这肯定适用于用例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
  • 1970-01-01
  • 2021-04-18
  • 2013-06-24
  • 1970-01-01
相关资源
最近更新 更多