Java jspについてです。

<select name="begin" size="1">で、値を2007 CommentsAdd Star

<select name="finish" size="1">で値を2015と得たとします。
<select name="during" size="1">で、
int j = finishの値 - beginの値 + 1;
int i2;
int[]no=new int[10];
for(int i=1;i<11;i++){
if((int)j / i == j / i){
i2 +=1;
no[i2] = i;
}
}
などのようにして、約数を算出し、それをduringのドロップダウンリストに作成したいのです。
教えてください。
Javascriptの記述だと思います。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2017/03/16 09:17:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4971ベストアンサー獲得回数2153

ポイント200pt

この回答のコードに書き足しました。
javascript で during を作ってます。

<select name="begin" size="1">
<%
    for(int j=1;j<nens.length;j++){
%>
    <option value="<%="nen"+j %>"><%=nens[j] %></option>
<%
    }
%>
</select><br>
<select name="finish" size="1"></select>

<!-- during を足してます -->
<br>
<select name="during" size="1"></select>


<script>
window.addEventListener("DOMContentLoaded", function() {
    var begin = document.querySelector('select[name="begin"]');
    var finish = document.querySelector('select[name="finish"]');
    begin.addEventListener("change", function() {
        var s = "";
        var selected = false;
        Array.prototype.forEach.call(begin.options, function(opt) {
            if (selected) {
                s += '<option value="' + opt.value + '">' + opt.innerHTML + '</option>';
            }
            if (opt.selected) {
                selected = true;
            }
        })
        finish.innerHTML = s;
    });

    // ここから、この質問の回答です
    function create_during() {
        var opt_begin = Array.prototype.find.call(begin.options, function(opt) {
            return opt.selected;
        });
        var opt_finish = Array.prototype.find.call(finish.options, function(opt) {
            return opt.selected;
        });
        var v_begin = parseInt(opt_begin.innerHTML, 10);
        var v_finish = parseInt(opt_finish.innerHTML, 10);

        var during = document.querySelector('select[name="during"]');
        var s = "";
        var n = v_finish - v_begin + 1;
        for (var k = 1 ; k <= n ; ++k) {
            if (n % k == 0) {
                s += '<option value="' + k + '">' + k + '</option>';
            }
        }
        during.innerHTML = s;
    }

    begin.addEventListener("change", create_during);
    finish.addEventListener("change", create_during);
    // ここまで

});
</script>

begin == 2007、finish == 2015 で、during が 1、3、9 。
begin == 2007、finish == 2016 で、during が 1、2、5、10 。
と、なります。


追記
アロー関数を、無名関数に変更しました。


追記
アロー関数を無名関数に変更するのが、一ヶ所 もれてました (´・ω・`)
ついでに、数をループするところを、素直な書き方に変更しました。

他23件のコメントを見る
id:kojiro_i619

これは、別の質問なので、遠慮します。ありがとうございました。

2017/03/16 09:16:41
id:a-kuma3

この質問のページから、別のページ(servlet)に飛ばしたときに選んだ年などを取りたいということですよね。

request.getParameter() は、選ばれた option の value を取得するので、begin の option を jsp で作っていくときに、value は "nen" + j ではなく、nens[j] を指定します。
finish の option の value は、begin のものを使うようにしています。
during は、見えている値を value に入れるようにしています。

2017/03/16 09:41:14

その他の回答0件)

id:a-kuma3 No.1

回答回数4971ベストアンサー獲得回数2153ここでベストアンサー

ポイント200pt

この回答のコードに書き足しました。
javascript で during を作ってます。

<select name="begin" size="1">
<%
    for(int j=1;j<nens.length;j++){
%>
    <option value="<%="nen"+j %>"><%=nens[j] %></option>
<%
    }
%>
</select><br>
<select name="finish" size="1"></select>

<!-- during を足してます -->
<br>
<select name="during" size="1"></select>


<script>
window.addEventListener("DOMContentLoaded", function() {
    var begin = document.querySelector('select[name="begin"]');
    var finish = document.querySelector('select[name="finish"]');
    begin.addEventListener("change", function() {
        var s = "";
        var selected = false;
        Array.prototype.forEach.call(begin.options, function(opt) {
            if (selected) {
                s += '<option value="' + opt.value + '">' + opt.innerHTML + '</option>';
            }
            if (opt.selected) {
                selected = true;
            }
        })
        finish.innerHTML = s;
    });

    // ここから、この質問の回答です
    function create_during() {
        var opt_begin = Array.prototype.find.call(begin.options, function(opt) {
            return opt.selected;
        });
        var opt_finish = Array.prototype.find.call(finish.options, function(opt) {
            return opt.selected;
        });
        var v_begin = parseInt(opt_begin.innerHTML, 10);
        var v_finish = parseInt(opt_finish.innerHTML, 10);

        var during = document.querySelector('select[name="during"]');
        var s = "";
        var n = v_finish - v_begin + 1;
        for (var k = 1 ; k <= n ; ++k) {
            if (n % k == 0) {
                s += '<option value="' + k + '">' + k + '</option>';
            }
        }
        during.innerHTML = s;
    }

    begin.addEventListener("change", create_during);
    finish.addEventListener("change", create_during);
    // ここまで

});
</script>

begin == 2007、finish == 2015 で、during が 1、3、9 。
begin == 2007、finish == 2016 で、during が 1、2、5、10 。
と、なります。


追記
アロー関数を、無名関数に変更しました。


追記
アロー関数を無名関数に変更するのが、一ヶ所 もれてました (´・ω・`)
ついでに、数をループするところを、素直な書き方に変更しました。

他23件のコメントを見る
id:kojiro_i619

これは、別の質問なので、遠慮します。ありがとうございました。

2017/03/16 09:16:41
id:a-kuma3

この質問のページから、別のページ(servlet)に飛ばしたときに選んだ年などを取りたいということですよね。

request.getParameter() は、選ばれた option の value を取得するので、begin の option を jsp で作っていくときに、value は "nen" + j ではなく、nens[j] を指定します。
finish の option の value は、begin のものを使うようにしています。
during は、見えている値を value に入れるようにしています。

2017/03/16 09:41:14
id:kojiro_i619

約数を確認する方法があればと思います。そこまでいっていないんじゃないかと。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません