2016-05-23 8 views
0

私はmvc5を使用しています。 jQueryをテストに含めないでください。 _Layout.cshtml:

<!DOCTYPE html> 
 
<html lang="en-US"> 
 
<head> 
 
    <title></title> 
 
</head> 
 
<body> 
 
    @RenderBody() 
 
</body> 
 
</html>

Test.cshtml:

<script type="javascript/text"> 
 
    function myFunction() { 
 
    alert("its is working"); 
 
    } 
 
</script> 
 
<button onclick="myFunction()">Click me</button>
Iエラー有する結果で

:にReferenceError:MyFunctionをが定義されていないが

と結果コード:

<!DOCTYPE html> 
<html lang="en-US"> 
<head> 
    <title></title> 
</head> 
<body> 
    <button onclick="myFunction();">Click me</button> 
<script type='text/javascript' > 
(function($){ 
    function myFunction() { 
     alert("I am working"); 
    }; 
})(jQuery); 
</script> 
</body> 
</html> 

私は、このエラーについて多くを読んだことがあると答えを設立していません。 JavaScriptコードを誰が折り返しますか?それをキャンセルするフラグはありますか?問題を解決する他の方法はありますか?

+0

インライン関数は、グローバルスコープにアクセスすることを想定しています。 'IIFE'で関数' definition'をラップしません。 – Rayon

+0

とインライン関数は、特にあなたがすでにコミットしているので、 using jQuery – Alnitak

+0

この特定の関数は、jQueryの 'document.ready'イベントハンドラを実行して、コードが実行される前にDOMが完全にロードされていることを確認する方法の1つです。通常は、スクリプトでDOM要素を参照する必要がある場合にこれを行います。そうすることで、その前に存在することを確認できます。この問題を解決するには、 'myFunction()'をその匿名関数の外に移動してグローバルスコープにするだけです。 – Archer

答えて

1

Something(おそらくMVC5)はあなたのコードをラップしますが、正当な理由があります。グローバルに宣言された関数を指す要素にハンドラを配置するのは、90年代にJSがどのように記述されたかです。あなた以来、

$('#mybutton').on('click', function() { 
    alert("I am working"); 
}); 

か:

すると、それを解決するには、ボタンの上にid属性を入れて、インラインイベントハンドラ削除:

<button id="mybutton"> 

をして、イベントハンドラを登録するためにjQueryのを使用しますこれらの要素を生成するループがあるという後のコメントでは、代わりにclassdata-という属性を使用しています。

コード付き

$('.myclass').on('click', function() { 
    var id = $(this).data('id'); 
    ... 
}); 
+0

答えてくれてありがとう。その場合、私には誤りがあります。 ReferenceError:jQueryは定義されていません})(jQuery); – Iva

+0

@Ivaしたがって、 '

-2
<script> 
function myFunction() { 
alert("its is working"); 
} 
</script> 
<button onclick="myFunction()">Click me</button> 

これは動作します。歓声

関連する問題