2016-08-16 13 views
0

"e"がJavascriptのメソッドの "イベント"を表している限り、私はそれらを呼び出すときにJavascriptメソッドで以下に述べるようないくつかのプロパティを使いたいと思ったらどういうことを理解していません。私はこの方法でe.preventDefault()またはe.ctrlKeyを使用することができる。例えばなぜonclickから呼び出されたJavascriptメソッドでeが使用されていないのですか?

$(".menuItem").click(function (e) { 

    e.preventDefault(); 

    //Open url in new tab with ctrl key press 
    if (e.ctrlKey) { 
     window.open(url, '_blank'); 
     event.stopPropagation(); 
     return false; 
    } 

    //... code omitted for brevity 
}); 

しかし、私は、すなわち.menuItemフォーム要素から呼び出され、その方法でそれらを使用することはできません。下の方法でそれを使用する可能性はありますか?

function TestFunction(e, controller, action) { 

     e.preventDefault(); 

     //Open url in new tab with ctrl key press 
     if (e.ctrlKey) { 
      window.open(url, '_blank'); 
      event.stopPropagation(); 
      return false; 
     } 

     //... code omitted for brevity 
    }); 
}; 

更新:私はその方法で電子を使用する場合

<a onclick="TestFunction('Account', '_Register')" id="test" class="nav-link "> 

"捕捉されなかっにReferenceError:eが定義されていません"エラーが発生した Iは、以下に示すようにTestFunction()を呼び出します。何か案が?人々は、イベントハンドラが受け取る引数を宣言するためにその名前を使用しているため

+0

あなたが見ることができるように、あなたの 'TestFunction'には' e'パラメータが存在しない、あなたは私が質問に記載されたエラーが発生することが –

+0

はい、それを使用するときに追加する必要があります。私は質問にeパラメータを追加しました。何か案が? –

+1

'TestFunction'をクリックイベントにバインドするにはどうしたらいいですか?あなたのコード '$("。menuItem ")にありますか?click(TestFunction);'? –

答えて

2

As far as I know "e" represent "event" in Javascript methods

からevent-objectを渡します。同じように簡単にgonzofishになる可能性があります。

TestFunctionでイベントオブジェクトを使用することはできません。イベントに応答する呼び出しが何であってもイベントオブジェクトをそのイベントオブジェクトに渡す場合を除きます。

更新:

<a onclick="TestFunction(e, 'Account', '_Register')" id="test" class="nav-link "> 

もしそうなら、にTestFunctionを変更します:あなたはこのようなTestFunction呼んでいると述べました

function TestFunction(e, controller, action)` 

を...とe(ないevent)を使用し、一貫その中でonclick属性をeventでなくでないものに変更する:

<a onclick="TestFunction(event, 'Account', '_Register')" id="test" class="nav-link "> 

onxyz属性イベントハンドラでは、eventはスコープ内の変数です(ほとんどのブラウザでは、属性テキストの周囲に生成された関数のローカルです。古いIEでは、それはグローバルです)。


サイドノート:あなたは定期的に、それが宣言されずに(というよりもeeventが表示される場合があります。マイクロソフトのIEは、世界中のeventオブジェクトを持っていた(おそらくまだそうである)(そして、ChromeはIEのために書かれたWebサイトを投げて、それを複製することにした; Firefoxはそうしなかった)。それを使用しないでください。代わりに、適切なイベント処理を使用し、受け取った引数を宣言します。

サイドノート2:Re TestFunction JavaScriptの圧倒的な慣習は、関数名がコンストラクタ関数(例えば、newと一緒に使用される)のときに大文字で始まるということです。慣習上の他のすべての関数名は、小文字で始める必要があります。もちろん、大会に従わないように選択することもできますが、大会に従えば他の人のコードを読むのが容易になります。

+0

詳細な説明に多くの感謝をします。私は私の質問で私のコードを更新し、現在は動作しています。その場合、 "eイベントは、そのようなjavascriptメソッドにも使用できますか?" –

+0

@binary:ここで重要なことは、 'e'は単なる引数の名前であるということです。引数は関数の呼び出し方法によって決まります。適切なイベントハンドラ( 'addEventListener'でフックアップ)では、イベントメカニズムはargumetnを関数foに渡します。 'onxyz'属性を使用する場合は、属性のコードがアクセスできる' event'変数を使用して明示的に渡す必要があります。 –

1

は、inline-click-handlerのみ慣例により

function TestFunction(e, controller, action) { 
 
    var url = 'https://www.google.com' 
 
    e.preventDefault(); 
 
    if (e.ctrlKey) { 
 
    window.open(url, '_blank'); 
 
    e.stopPropagation(); 
 
    return false; 
 
    } 
 
}
<a href="#" onclick="TestFunction(event,'a','b')">Click me!!!</a>

+2

'TestFunction'がどのように呼び出されているか分からず、あまり役に立ちません。 –

+0

@TJCrowder - .. 'event'オブジェクトはこのように書かれるコールド渡すと受け入れて同じの編集だった... – Rayon

+0

@Rayonが動作しているようですが、Ctrlキーを使用して、新しいタブ*"にReferenceErrorを開くために押された:イベントがあります定義されていません "*エラーが発生しました。何か案が? –

0

イベントOR eはイベントのみで使用することができます。あなたは機能でアクセスしようとしています。

関数で使用するには、イベントからパラメータを渡す必要があります。

function TestFunction(controller, action,e) {..... 
+0

私はdownvoteの理由を知ることができますか? –

+0

私はdownwoterないのですが、ちょうどについては、私はまた、あなたがクリックイベントからそのパラメータを渡してきた、同じように試みたが、うまくいきませんでした:( –

+0

おかげ? –

関連する問題