如何检查coffeescript中的语法错误

h7appiyu  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(326)

我不熟悉coffee脚本,我尝试将jquery从视图移动到资产中,但无法使其工作。
以下是工作视图:

- jquery_ready do
  $('label[for=voucher_name], input#voucher_name').hide();
  $( "#voucher_voucher_provider_id" ).change(function() {
  var exist_id = $(this).val();
  var ids = $('#voucher_false_ids_')[0].value;
  if(jQuery.inArray(exist_id, ids.split(" ")) !== -1){
  $('label[for=voucher_name], input#voucher_name').hide();
  }
  else
  {
  $('label[for=voucher_name], input#voucher_name').show();
  }
  });

然后在/app/assets/javascript/mycode.js.coffee中

jQuery ->
  $('label[for=voucher_name], input#voucher_name').hide();
  $( "#voucher_voucher_provider_id" ).change ->
    exist_id = $(this).val();
    ids = $('#voucher_false_ids_')[0].value;
    alert('alert');
    If(jQuery.inArray(exist_id, ids.split(" ")) !== -1)
      $('label[for=voucher_name], input#voucher_name').hide();
    else
      $('label[for=voucher_name], input#voucher_name').show();

到目前为止,我可以一直运行到.change->alert('alert');不是在我开始把所有的线放在if之后
导致错误的原因:

ExecJS::RuntimeError at /admin
SyntaxError: [stdin]:6:51: unexpected =

帮助:获取正确的语法或错误来自何处/谢谢

polhcujo

polhcujo1#

如果您将该片段粘贴到coffeescript网站的“try coffescript”页面,它会告诉您出了什么问题。
上面说:

[stdin]:7:51: error: unexpected =
    If(jQuery.inArray(exist_id, ids.split(" ")) !== -1)
                                                  ^

coffeescript没有 ===!== 接线员。 ==!= 在为您编译时,会将其转换为严格的等效项。
如果您修复了该问题,则会出现另一个错误:

[stdin]:8:1: error: unexpected indentation
      $('label[for=voucher_name], input#voucher_name').hide();
^^^^^^

这是因为前一行。你开始一个 if 声明 If ,所以coffeescript不认为这是 if 语句,而是作为对 If() 功能。
把它改成小写 if 然后它编译得很好。
短版本,这里是固定的:

jQuery ->
  $('label[for=voucher_name], input#voucher_name').hide();
  $( "#voucher_voucher_provider_id" ).change ->
    exist_id = $(this).val();
    ids = $('#voucher_false_ids_')[0].value;
    alert('alert');
    if(jQuery.inArray(exist_id, ids.split(" ")) != -1)
      $('label[for=voucher_name], input#voucher_name').hide();
    else
      $('label[for=voucher_name], input#voucher_name').show();

相关问题