dポイントプレゼントキャンペーン実施中!

スクリプト部分に

function aaa(){
var path = prompt("ファイル名を入力:","");
location.href = path + ".html";
}

と記述しております。

HTMLに
<FORM>
<INPUT TYPE=button VALUE="閲覧" onclick="aaa();">
</FORM>
のようにフォームで書くと期待通りに動くのですが、

<A HREF="javascript:" onClick="aaa();">閲覧</A>
のようにリンク文字で書くと思うように飛びません。
(リンク先へ飛ばず元の画面のまま)

不備があるのでしょうか、それともリンク文字では不可なのでしょうか。
ご存知の方いらっしゃいましたら改善方法をご教授願います。

宜しくお願い致します。

A 回答 (7件)

とりあえず


function aaa(){
var path = prompt("ファイル名を入力:","");
location.href = path + ".html";
return( false );
}
以上でご質問の問題点は解消できるでしょう。
原因はonClickイベントが評価されながらも戻り値が偽でない為に改めてタグの方が評価されている為です。
尚、回答は質問時に提示の関数に終了時に常に戻り値を偽として返している点が異なり
回答 #2 の方とは戻り値を返す条件が違います。


次に検討のポイントです。
JavaScript を用いるのですから無効の場合の配慮はどうしますか?
これによりそもそもどのタグを用いるかも違ってきます。
例えば JavaScript が有効なら入力文字列で処理し、無効なら OffJavaScript.html に飛ばすという考えなら
<A HREF="OffJavaScript.html" onClick="aaa();">閲覧</A>
と出来ます。もちろん aaa 関数の戻り値は常に偽です。
この例示の場合、JavaScript が有効の場合は onClick イベントにて偽が返ってきて HREF="OffJavaScript.html" は評価されません。
<A HREF="sample.html" onClick="return(false);">参考1</A>
上記の様に簡略化でき、この場合は JavaScript が有効の場合はいくら「参考1」をクリックしても何も起きません。
逆に JavaScript が無効な場合は onClickイベントは関係なくタグが評価され OffJavaScript.html や sample.html へ飛ぼうとします。
あとはその先に目的のページがあるかないか・・・。

上記を踏まえて質問で提示の
><A HREF="javascript:" onClick="aaa();">閲覧</A>
タグでのリンク先の記述も JavaScript の処理であり合わせて onClickイベントにて JavaScript の処理も記述・・・。
<A HREF="javascript:aaa();">閲覧</A>
これだけでも済むような・・・。
というか、A要素(タグ)を選ぶ理由が減り他の要素(タグ)で onClickイベントが使えれば良いだけの様な気が・・・。
<SPAN onClick="aaa();">閲覧</SPAN>
これでも同じ様な・・・。尚、aaa 関数の戻り値も影響しません・・・。
    • good
    • 1

> <A HREF="javascript:void()" onClick="aaa();">閲覧</A>


void()のままだとエラーになります。これは、void(0)の記述ミスだと思います。また、void(0)に書き直したとしても、少なくともWinXP IE6では意図する動きをしないでしょう。

> <A HREF="#" onClick="aaa();">閲覧</A>
こちらはおおむねうまく動きますが、キャンセルを押したときに、#つきのアドレスに移動になってしまいます。それでもいいという条件付なら、この記述でもOKだと思います。

私も間違った回答をしたことがありますが、そのときには恥ずかしいと思いましたし、そのような軽率な回答をできるだけしないように心がけています。特にプログラムなど実際に動かせば正しいかどうか確認できることなので、コードを張る際には必ず動作確認をするようにしています。またそれがマナーだと考えています。
    • good
    • 0

<A HREF="javascript:void()" onClick="aaa();">閲覧</A>


<A HREF="#" onClick="aaa();">閲覧</A>
という書き方があります

#4さんのように自分だけが正しいような高みから
見おろす発言はいかがなのものかとおもいますが。
    • good
    • 0

アンカータグ(aタグ)についての理解が不足しているようですね。



アンカータグではhrefの記述とonclickの記述は併用できません。[href="javascript]と記述しているところから察するにやりたいことは、下記の記述の書き間違いと想像します。

<A HREF="javascript:aaa();">閲覧</A>


しかしこの質問に限らず、質問者の意図や解決法がよくわかっていない方が回答されることが多いようで、少し驚いています。
    • good
    • 0

><A HREF="javascript:" onClick="aaa();">閲覧</A>


だと、「閲覧」という文字列をクリックしたら「javascript」へ行く命令ですよ?
同時にonClickが書いてあるから関数aaa()を呼び出すけど、その時は「javascript」へ飛んでいるので関数aaa()が呼び出されても無効ですね。

姑息な手段:
<a onClick="aaa();"><u>閲覧</u></A>
fontも組み合わせて色を変えると更に良いかも。
(ただマウスのポインタが指に変わらないのでNG)
↑秘密のリンクを作るのには良いよ

正統派の方法その1:
<a name="aaa"></aaa>を設定後
<A HREF="今いるページ#aaa" onClick="aaa();">閲覧</A>
で自ページのどこかへ飛ばしておく
(IEのver6だと、これでも動く)

正統派の方法その2:
function aaa(){
var path = prompt("ファイル名を入力:","");
location.href = escape(path)+ ".html";
}
で本文の<A>は正統派の方法1と同じにしておく

というのはいかが?
お試し下さい。
    • good
    • 0

単純にアンカータグの際はオンクリック後の動作をカットしてあげればいいのではないでしょうか?



function aaa(){
var path = prompt("ファイル名を入力:","");
if( path ) {
location.href = path + ".html";
return( false );  ←重要
}

}

タグ部分にはreturnを追記
<A HREF="javascript:" onClick="return( aaa(); )">閲覧</A>
    • good
    • 0

現在のページをindex.htmとした場合



<SCRIPT language="JavaScript">
<!--
function Check(){
flag=0;
psword=p_form.psw.value;
if(psword>0){
flag=1;
alert("入力文字列が違います。");
location.href="index.htm";
}
if((psword!="")&&(flag==0)){
location.href=psword+".htm";
}else{
alert("決められた文字列ではないので先に進めません。");
location.href="index.htm";
}
}
//-->
</SCRIPT>
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!