web-dev-qa-db-ja.com

Uncaught SyntaxError:無効または予期しないトークン

私はこのようなカミソリ構文を持っています:

   foreach(var item in model)
 {
<td><a href ="#"  onclick="Getinfo(@item.email);" >6/16/2016 2:02:29 AM</a>  </td>
 }

リクエストを受信する私のJavaScriptは次のようになります:

<script type="text/javascript" src="~/Scripts/jquery-1.9.1.js"></script>
<script type="text/javascript">
    function Getinfo(elem) {
        var email = document.getElementById(elem).innerHTML;
    }
</script>

Hrefリンクをクリックすると、ブラウザのコンソールに次のエラーが表示されます。

「Uncaught SyntaxError:無効または予期しないトークン」、

この部分には下線が引かれています:

    **</a>  </td>**

私は初心者なので、多くの構文にこだわっています。それがそれなら私を助けてください。

26
Himaan Singh

@item.emailを引用符で渡すと、文字列引数として扱われます

<td><a href ="#"  onclick="Getinfo('@item.email');" >6/16/2016 2:02:29 AM</a>  </td>

そうでない場合、変数として扱われ、エラーが生成されます。

44
Satpal

受け入れられた回答は、1行の文字列(電子メール)がある場合に機能しますが、

複数行の文字列、エラーが残ります。

この問題を調べてください:

<!-- start: definition-->
@{
    dynamic item = new System.Dynamic.ExpandoObject();
    item.MultiLineString = @"a multi-line
                             string";
    item.SingleLineString = "a single-line string";
}
<!-- end: definition-->
<a href="#" onclick="Getinfo('@item.MultiLineString')">6/16/2016 2:02:29 AM</a>
<script>
    function Getinfo(text) {
        alert(text);
    }
</script>

以下のようにGetinfoで一重引用符( ')をbacktick( `)に変更すると、エラーが修正されます。

<a href="#" onclick="Getinfo(`@item.MultiLineString`)">6/16/2016 2:02:29 AM</a>
3
Iman Bahrampour

このシナリオでは、複数行の文字列にも問題がありました。 @Imanのbacktick( `)ソリューションは、最新のブラウザーではうまく機能しましたが、Internet Explorerでは無効な文字エラーが発生しました。次のものを使用する必要がありました。

'@item.MultiLineString.Replace(Environment.NewLine, "<br />")'

それから、js関数にキャリッジリターンを再度配置する必要がありました。 RegExを使用して複数のキャリッジリターンを処理する必要がありました。

// This will work for the following:
// "hello\nworld"
// "hello<br>world"
// "hello<br />world"
$("#MyTextArea").val(multiLineString.replace(/\n|<br\s*\/?>/gi, "\r"));
0
cspete