2008-08-22 6 views
16

私はできるだけ多くのjavascriptコードを読んで、最近私のjavascriptスキルを向上させるための協調的な努力をしてきました。これを行うにあたり、HTML要素タグのイベントハンドラ属性の前に、接頭辞javascript:が追加されていることがあります。このプレフィックスの目的は何ですか?イベントハンドラタグの "javascript:"の目的は何ですか?

onchange="javascript: myFunction(this)" 

onchange="myFunction(this)" 

:基本的には、間の任意のかなりの違いがありますか?

答えて

18

あなたの例ではおそらく何もありません。私の理解では、javascript:はアンカータグ用です(実際のhrefの代わりに)。ユーザーがリンクをクリックしたときにページに戻ってナビゲーションを開始せずに(onclickと結合した空白のhrefが実行する)、スクリプトを実行できるようにします。例えば

<a href="javascript:someFunction();">Blah</a> 

むしろより:

<a href="" onclick="someFunction();">Blah</a> 
1

私はJavaScriptで何の権威午前、アスカーより劣等生のおそらくよりますが、私の知る限り、差はjavascript:ということです接頭辞はURIコンテキストで優先/必須です。ここで、引数はJavaScriptのトリガーとしての従来のHTTP URLでもかまいません。

だから、私の直感的な答えは(実に間違っていない場合) onChangeではJavaScriptを期待するので、 javascript:接頭辞が冗長である、ということでしょう。ただし、アドレスバーに javascript:myFunction(this)と書いて、その機能を実行することはできます。 javascript:なければ、あなたのブラウザは javascript:プレフィックスが onevent属性内で何を意味している場合、私は知らない...など、そのサーバーを参照し、

1

をURLとしてmyFunction(this)を解釈しようとDNS情報を取得しようとするでしょうしかし、新しいタブでリンクを開くときにアンカータグで迷惑をかけることがわかっています。 hrefは、フォールバックとして使用し、にリンクしてください。

4

これはhrefタグでのみ使用してください。

これはばかげている。

受け入れられた方法はこれです:

<a href="/non-js-version/" onclick="someFunction(); return false">Blah</a> 

しかし、OPに答えるためには、一般的にもうjavascript:を使用する理由はありません。実際には、マークアップのインラインではなく、スクリプトからjavascriptイベントをアタッチする必要があります。しかし、それは私が思うに純粋なことです:-D

12

イベントハンドラでは使用しないでください(ほとんどのブラウザは防衛的に動作し、あなたを罰せません)。また、アンカーのhref属性で使用すべきではないと主張します。ブラウザがJavaScriptをサポートしている場合、適切に定義されたイベントハンドラが使用されます。ブラウザが表示されない場合は、javascript:リンクが壊れて表示されます。IMOでは、javascriptでその機能を使用できるようにする必要があることを説明するページを指す方がよいでしょう。したがって、次のようなものがあります。

<a href="non-ajax.html" onclick="niftyAjax(); return false;">Ajax me</a> 

編集:javascriptを使用する正当な理由が考えられます。 Bookmarklets。例えば、これは、RSSを表示するには、Googleリーダーにあなたを送り、ページのフィード:

<a href="javascript:var%20b=document.body;if(b&&!document.xmlVersion){void(z=document.createElement('script'));void(z.src='http://www.google.com/reader/ui/subscribe-bookmarklet.js');void(b.appendChild(z));}else{location='http://www.google.com/reader/view/feed/'+encodeURIComponent(location.href)}">Drag this to your bookmarks, or right click and bookmark it!</a> 
1

のjavascript:

var b=document.body; 
if(b&&!document.xmlVersion){ 
    void(z=document.createElement('script')); 
    void(z.src='http://www.google.com/reader/ui/subscribe-bookmarklet.js'); 
    void(b.appendChild(z)); 
}else{ 
    location='http://www.google.com/reader/view/feed/'+encodeURIComponent(location.href) 
} 

ユーザーが簡単にこのブックマークレットを追加さ​​せるには、あなたはとてもようにそれをフォーマットします:onclick属性のようなJSコードでは、ブラウザでサポートされている場合とされていない場合があります(どこにもない可能性があります)。それはzipzambamかもしれません:代わりに。ラベルを使用できない場合でも、ブラウザはそれを受け入れてエラーを起こさないようにします。

これは、誰かがonclick属性で無駄なラベルを投げた場合、自分が何をしているのかわからなくて、以下のことをコピーして貼り付けたり、習慣からやっていることを意味します。

javascript:href属性で、Javascript URIを表します。

Example

javascript:(function()%7Balert(%22test%22)%3B%7D)()%3B 
0

@mercutio

ばかげ。

いいえ、それはばかげて、ジャバスクリプトではありません。確かにのみ、リンクの対象として使用することができ、擬似プロトコルであるので、彼は非常に正しいです。あなたの提案は本当に良いですが、すべての最良の方法は、控えめなjavascriptテクニックを使用して、HTML要素を反復処理し、jQueryなどのライブラリで使用されるように、プログラムで動作を追加することです。 onchange="javascript: myFunction(this)"onchange="myFunction(this)":基本的に

0

、間の任意のかなりの違いがありますか?あなたがhref="javascript: myFunction(this)"を意味と仮定

、イエスはJavaScriptを使用してコンテンツをロードする場合は特に、そこにあります。 javascript:pseudoプロトコルを使用すると、実際のhrefを使用してjavascriptを使用してリンクの動作を変更すると、javascriptがオフになっているか特定のクライアントで利用できない場合、コンテンツにアクセスできるようになります。

1

イベントハンドラ内のjavascript:の起源は実際にはIE固有のものなので、ハンドラに加えて言語を指定することができます。これは、vbscriptもIEのクライアントサイドスクリプト言語でサポートされているためです。ここには"vbscript:"の例があります。

他のブラウザ(Shadow2531で言われているように)javascript:は単なるラベルであり、基本的に無視されます。

href="javascript:..."は、DannySmurfが指摘しているように、JavaScriptコードを実行するリンクで使用できます。

0

Flubba:Firefoxや他のブラウザでは、「新しいタブで開く」「新しいウィンドウで開く」とjavascript:HREFの断線の

使用。

「間違っていませんが、あなたのサイトをナビゲートしたくない場合は...

関連する問題