アプリ版:「スタンプのみでお礼する」機能のリリースについて

はじめてOK Waveで質問します。
よろしくお願いします。

javascriptについての質問です。

form内の複数のradioの項目の組み合わせに応じて、if文でlocation.hrefでページ遷移するというjsを書きました。
IEでは動作しましたが、firefoxで動作しませんでした。

firefoxで動かない原因が分からず、自分なりにalertを使いながら原因を探っていたところ、
if文の次にalertを書いたところ、firefoxでも動作することができました。

------------------------------
function pageshift() {

var one, two;

for (i = 0; i < 2; i++) {
if(document.form.one[i].checked){
one = document.form.one[i].value;
}
}

for (i = 0; i < 2; i++) {
if(document.form.two[i].checked){
two = document.form.two[i].value;
}
}



if(one == 'a' && two == 'a') {
window.location.href = 'aa.html';}
}
else if(one == 'a' && two == 'b') {
window.location.href = 'ab.html';}
}

alert('test');

}
------------------------------
(最後のalert('test');を書いたらそれまでfirefoxでは動作しなかったものが、動作した、ということです。IEではalert('test');がなくても目的通りに動作しています。)

しかしながら、alertでメッセージが出てきてしまうのは避けたいと考えています。

alertを書いてページ遷移のfunctionが動作(正常に処理?)したとするならば、alertと同じような処理状態でなおかつメッセージを表示しないような状態に持っていければ、目的どおりになるのではないかと考えています。

どのように記述していけばいいのでしょうか・・・?

よろしくお願いいたします。

A 回答 (3件)

適当に、こんなものを作ってみました。



<html>
<head>
<script type="text/javascript">
<!--
function pageshift() {

var one, two;

for (i = 0; i < 2; i++) {
if(document.form.one[i].checked){
one = document.form.one[i].value;
}
}

for (i = 0; i < 2; i++) {
if(document.form.two[i].checked){
two = document.form.two[i].value;
}
}

if(one == 'a' && two == 'a') {
window.location.href = 'aa.html';
}
else if(one == 'a' && two == 'b') {
window.location.href = 'ab.html';
}

}

-->
</script>
</head>
<body>
<form name="form">
one<br>
<input type="radio" name="one" value="a">a<br>
<input type="radio" name="one" value="b">b<br>
<br>
two<br>
<input type="radio" name="two" value="a">a<br>
<input type="radio" name="two" value="b">b<br>
<br>
<input type="button" value="click" onclick="pageshift();">
</form>
</body>
</html>

pageshift()については、window.location・・・の部分の}が多かったものは消去しています。
(これは単なるコピーミスだと思いますが)
上のソースはFirefox3では動くようです。

実際に使っているpageshift()は恐らく、質問で書かれたものとは違うと思います。
alert()がないと動かないのは、他に原因があるのではないでしょうか。
    • good
    • 0
この回答へのお礼

参考ソース作成、ありがとうございます。
参考ソースがfirefoxで動作しているのを確認し、なぜ自分のソースでは動作しないのか???と考えています。

> 実際に使っているpageshift()は恐らく、質問で書かれたものとは違うと思います。

確かにそのとおりです。
コピーミスはありましたが(すみません)、基本的なロジックの構造は同じです。

> alert()がないと動かないのは、他に原因があるのではないでしょうか。

そうかもしれません。。
html側で読み込んでいるjsはひとつだけで、そのjsの中にはpageshift()のみ記述してあるだけなのですが。。

作成していただいた参考ソースと自分のソースを見比べながら、考えてみようと思います。

お礼日時:2008/08/12 11:13

もしformに「form」という名前をつけているならやめるべきです。


formに名前はつけてはいけないことになっていますし、ましてや
予約語を使うのはトラブルのもとです。

こんな感じでオブジェクトでわたしてやってはどうでしょうか?

<script>
function pageshift(f) {
var one, two;
for(var i=0;i<f.length;i++){
if(f[i].type=="radio" && f[i].checked){
if(f[i].name=="one") one = f[i].value;
if(f[i].name=="two") two = f[i].value;
}
}
if(one == 'a' && two == 'a') location.href = 'aa.html';
if(one == 'a' && two == 'b') location.href = 'ab.html';
}
</script>


<form>
one<br>
<input type="radio" name="one" value="a">a<br>
<input type="radio" name="one" value="b">b<br>
<br>
two<br>
<input type="radio" name="two" value="a">a<br>
<input type="radio" name="two" value="b">b<br>
<br>
<input type="button" value="click" onclick="pageshift(this.form);">
</form>
    • good
    • 0
この回答へのお礼

参考ソース作成、ありがとうございます。

こちらのソース及びNo.2の参考ソースと、自分で書いたソースを睨めっこしていたところ、問題が解決いたしました。

原因はjsではなくhtmlだったようです。
form内のsubmitするボタンを
<button onmouseup="pageshift();">検索</button>
としていたのですが、
お二人に作成して頂きましたソースでは共通して
<input type="button">
を使用していらしたので、そのように修正したところ、firefoxでも目的どおりに動作することを確認できました。

ご回答頂きました皆様に感謝です。
ありがとうございました。

お礼日時:2008/08/12 11:30

タイマーを使ってはどうでしょうか?↓こんな感じ。



if(one == 'a' && two == 'a') {
setTimeout(function(){
window.location.href = 'aa.html';
},1)
}
else if(one == 'a' && two == 'b') {
setTimeout(function(){
window.location.href = 'ab.html';
},1)
}
    • good
    • 0
この回答へのお礼

ありがとうございます。

試してみたのですが、やはりfirefoxでは動作しませんでした。。

お礼日時:2008/08/12 10:48

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