SyntaxError:期望表达式,得到关键字' if'

时间:2015-08-24 14:44:33

标签: javascript jquery

我在这里有一个问题,如果你们能帮助我,我会为此感到高兴。所以我想隐藏一个按钮" changeOrderUp"当它在第一行并希望与" changeOrderDown"相同时按钮,当它在最后一行中找到时。但FireBug返回此错误:"语法错误:预期表达式,获得关键字'如果'" ,我无法确定原因。请帮我!

这是我的js代码:

for(var ordem = (data.var_pergunta).length; ordem >= 1 ; ordem--){
    $('<tr><td class="ordem-pergunta-'+ordem+'">'+ordem+'</td> \
    <td class="ds-pergunta-'+ordem+'">'+data.var_pergunta[ordem - 1].ds_pergunta+'</td> \
    <td class="cd-pergunta-'+ordem+' hide">'+data.var_pergunta[ordem - 1].cd_pergunta+'</td> \
    <td><button id="'+ordem+'" class="btn-change-order-up btn btn-primary '+if(ordem == 1){ document.write('hide');}+'" type="button"><i class="fa fa-angle-up"></i></button> \
    <button id="'+ordem+'" class="btn-change-order-down btn btn-info '+if(ordem == (data.var_pergunta).length)){ document.write('hide');}+'" type="button"><i class="fa fa-angle-down"></i></button> \
    </td></tr>').insertAfter('.tr-ordem-pergunta');
                        }

2 个答案:

答案 0 :(得分:5)

Javascript不允许内联if条件。如果您需要内联条件,则应使用ternary operator,其行为与if块非常相似。

除此之外,您不应该使用document.write。它不会返回用于连接的字符串,但会删除文档并将该字符串写入页面。

您应该替换

的每个实例
if(ordem == 1){ document.write('hide');}

类似

(ordem === 1 ? 'hide' : '')

这将:

  1. ordem与1进行比较,严格(=====更严格)
  2. 如果比较是真实的,则返回'hide'
  3. 否则返回一个空字符串
  4. 您还可以通过在每行的末尾放置+来简化代码,而不是转义换行符。使用像这样的逃避更难阅读。

    总之,我会重构那个片段:

    for (var ordem = data.var_pergunta.length; ordem >= 1; --ordem){
      $('<tr><td class="ordem-pergunta-' + ordem + '">' + ordem + '</td>' +
        '<td class="ds-pergunta-'+ordem+'">' +
          data.var_pergunta[ordem - 1].ds_pergunta +
        '</td>' +
        '<td class="cd-pergunta-'+ordem+' hide">' +
          data.var_pergunta[ordem - 1].cd_pergunta +
        '</td>' +
        '<td><button id="'+ordem+'" class="btn-change-order-up btn btn-primary ' +
          (ordem === 1 ? 'hide' : '') +
        '" type="button"><i class="fa fa-angle-up"></i></button>' +
        '<button id="'+ordem+'" class="btn-change-order-down btn btn-info ' +
          (ordem === data.var_pergunta.length ? 'hide' : '') +
        '" type="button"><i class="fa fa-angle-down"></i></button>' +
        '</td></tr>').insertAfter('.tr-ordem-pergunta');
    }
    

    如果字符串很长,那么最好不要使用像Handlebars.js这样的真实模板库。作为模板编写,您的字符串可能变为:

    <tr>
      <td class="ordem-pergunta-{{ordem}}">{{ordem}}</td>
      <td class="ds-pergunta-{{ordem}}">{{prev_ordem.ds_pergunta}}</td>
      <td class="cd-pergunta-{{ordem}} hide">{{prev_ordem.cd_pergunta}}</td>
      <td>
        <button id="{{ordem}}" class="btn-change-order-up btn btn-primary {{#if first_ordem}}hide{{/if}}" type="button">
          <i class="fa fa-angle-up"></i>
        </button>
        <button id="{{ordem}}" class="btn-change-order-down btn btn-info {{#if last_ordem}}hide{{/if}}" type="button">
          <i class="fa fa-angle-down"></i>
        </button>
      </td>
    </tr>
    

    你会把它呈现为:

    template({
      ordem: ordem,
      prev_ordem: data.var_pergunta[ordem - 1]
      first_ordem: ordem === 1,
      last_ordem: order === data.var_pergunta.length
    });
    

答案 1 :(得分:0)

试试这个。将条件值存储在变量中并打印出来。

for(var ordem = (data.var_pergunta).length; ordem >= 1 ; ordem--){
if(ordem == 1){ var val = document.write('hide'); }
if(ordem == (data.var_pergunta).length)){ var another = document.write('hide');}
$('<tr><td class="ordem-pergunta-'+ordem+'">'+ordem+'</td> \
<td class="ds-pergunta-'+ordem+'">'+data.var_pergunta[ordem - 1].ds_pergunta+'</td> \
<td class="cd-pergunta-'+ordem+' hide">'+data.var_pergunta[ordem - 1].cd_pergunta+'</td> \
<td><button id="'+ordem+'" class="btn-change-order-up btn btn-primary '+val+'" type="button"><i class="fa fa-angle-up"></i></button> \
    <button id="'+ordem+'" class="btn-change-order-down btn btn-info '+another+'" type="button"><i class="fa fa-angle-down"></i></button> \
    </td></tr>').insertAfter('.tr-ordem-pergunta');
                        }