2017-09-28 13 views
-1

OpenPanel関数を呼び出す必要がある複数のボタンがありますが、インラインイベントハンドラを使用すると、クロムはそれを気に入らないようです。選択肢はありますか?ありがとう!複数のボタンで同じ機能を使用する

HTML:

<button id="showBg" class="panelB" onclick="OpenPanel(this)">Btn1</button> 

<button id="showNews" class="panelB" onclick="OpenPanel(this)">Btn2</button> 

はJavaScript:

function OpenPanel(elem){ 
alert (elem.id); 
} 

クロームエラー:あなたは、セレクタとクリック機能としてクラスを使用することができますjQueryを使って

Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self' blob: filesystem: chrome-extension-resource:". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution. 
+0

OpenPanel(this)の後に ';'を追加しようとしましたか? – user5014677

+0

@ user5014677さて、ちょうどやった。クロムはまだそれを好きではありません。 '次のコンテンツセキュリティポリシーの指令:" script-src 'self' blob:filesystem:chrome-extension-resource: "に違反しているため、インラインイベントハンドラを実行することを拒否しました。インライン実行を有効にするには、unsafe-inlineキーワード、ハッシュ( 'sha256 -...')、またはnonce( 'nonce -...')のいずれかが必要です。 – Deathtitan77

+0

私にとってうまく動作します:https:/ /jsfiddle.net/barmar/wf4s889w/ – Barmar

答えて

0

...

HTML :

<button id="showBg" class="panelB">Btn1</button> 
<button id="showNews" class="panelB">Btn2</button> 

のjQuery:

$('button.panelB').click(function() { 
    alert($(this).attr('id')); 
}); 

あなたOpenPanel関数を呼び出す必要があるいくつかの理由で、その代わりにjQueryオブジェクトのDOM要素を期待している場合...

function OpenPanel(elem) { 
    alert(elem.id); 
} 

$('button.panelB').click(function() { 
    OpenPanel(this); 
}); 

役に立ったら嬉しいです

+0

ありがとう、それは私のために働く。 – Deathtitan77

+0

よろしくお願いします!素敵な1日と楽しいコーディングをしてください。 –

+0

これは何のためですか? '$(this).get(0)' jQueryオブジェクトを1つの要素で作成し、そこから最初の要素を取り戻します。これはちょうど 'this' **を単独で使うこととまったく同じです**。 – Quentin

0

あなたはまだ使用できます:

$(".panelB").click(function(){ 
    {...} 
}); 

$(this)には、クリックされた現在の要素が含まれています。

3

chrome doesn't like it when I use inline event handlers

Chromeはインラインイベントハンドラに問題はありません。エラーメッセージに、問題がコンテンツセキュリティポリシーであることが示されます。

HTTPヘッダーまたはメタタグのいずれかを使用して、インラインイベントハンドラの使用を禁止しています。

これはおそらく最適です。インラインイベントハンドラには厄介な問題があります。

代わりにJavaScriptを使用してイベントハンドラをバインドします。

function openPanelHanler(event) { 
    OpenPanel(this); 
} 

var panels = document.querySelectorAll(".panelB"); 
for (var i = 0; i < panels.length; i++) { 
    panels[i].addEventListener("click", openPanelHander); 
} 
+0

ああ、ご理解いただきありがとうございます。私は実際にエクステンションを書いているので、おそらくそれはなぜですか? – Deathtitan77

関連する問題