ショボ短歌会

あまり知識がないので、わかりにくい表現や用語の誤りはご容赦下さい。

webページ(HTML)内にあるリストボックス(LBOX1)から、
cgiでリストボックスの項目を選択したいです。

webページの方に変更があり、これまで利用していたcgiでは項目を選択できなくなってしまいました。

cgiの項目選択部分
----------
for (i=0; i<IE.document.all("LBOX1").all.length - 1; i++) {
if (IE.document.all("LBOX1").all[i].text == "要素1" ){
IE.document.all("LBOX1").selectedIndex = i;
break ;
}
}

上記で「要素1」に該当する項目を選択できていました。
ターゲットとなるwebページに変更があってから、選択できなくりました。

関連しそうなと思われるwebページの相違点ですが…

変更前HTMLソース一部
----------
var a = form.LBOX1.options;
var len = a.length;
for( i = 0 ; i < len - 1 ; i ++ ) { a.remove( 0 ); }

変更後HTMLソース一部
----------
var a = form.LBOX1.options;
var option = a[a.length-1].cloneNode(true);
form.LBOX1.innerHTML = "";
form.LBOX1.appendChild(option);
a = form.LBOX1.options;

リストボックスの項目が選択できないのは、
このソース一部がカギとなるのかも全く影響ないのかもわかりません。

以上の情報でcgi修正で項目選択可能になるのか、
HTMLソースの他部分を見るべきなのか、
見当もつけられないので教えてください。

なお、リストボックスの中身については変更前後のwebソースを見る限り変更はありませんでした。

A 回答 (2件)

こんにちは



cgiはわからないので、申し訳ありませんが回答ではありません。

とは言え、ご質問の文章のままでは、内容が把握しにくいものになっていますので、もう少し舗装説明をなさった方が回答が得られるのではないかと。

まず、全体の仕組みとしてそのcgiがどのような処理を行っているのかがわかりません。
>webページの方に変更があり、これまで利用していたcgi
>では項目を選択できなくなってしまいました。
この「webページ」というのは、cgi自身が出力しているページなのでしょうか、それともどこか他のページを読み込んで(編集処理などをして)新たに出力しているということなのでしょうか?

もしも自身で出力するページであるならば、その後の説明にあるjavascript(?)を利用する(まわりくどい方法をとっている)理由がわかりません。
なぜ、出力するHTMLを直接編集しないのでしょうか?

一方で、「他のページを読込んで編集」しているのであれば、変更の前後で提示なさっているのが、webページのソースでなく、javascriptの一部のみというのもわかりません。
対象となっているHTMLも不明なので、回答者は、想像して回答するしかないでしょう。
この場合であっても、ソースを直接編集することは可能なはずと思いますが…?

・・・ということで、「cgiを修正する」ことをお望みであるなら、
 ・cgiに使用している言語
 ・変更したい処理内容
 ・その処理に関係する部分のcgiのソースコード
を簡潔に提示なさる必要があると思われます。


>cgiでリストボックスの項目を選択したいです。
リストボックスというのは、HTMLのselect要素のことではないかと想像しますが、
>ドロップダウンリストやテキストボックスに対する処理もあるのですが、
>それはうまく動くようですが、~~
と言葉を使い分けていらっしゃるので、最もselect要素っぽいのは「ドロップダウンリスト」かなと思います。
そうなると、リストボックス」っていったい何なんだろうってことになっちゃいます。

>cgiでは項目を選択できなくなってしまいました。
「項目の選択」って、select要素のデフォルトの選択表示の意味でしょうか?
であるなら、option要素にselected属性を設定してあげるのが妥当に思えるのでが・・・

>cgiの項目選択部分
として提示なさっている内容は、言語が不明ですがcgiの記述にはみえません。
javascriptっぽい記述ではありますが、通常のブラウザだと(多分)エラーになると思いますので、これまで動作していたというのもわかりません。(select要素のall.lengthが取得できない)
ひょっとすると、スクリプトが動作していなくてもたまたま結果がそうなっていて、あたかも処理されているように見えていただけではないのかと勘ぐってしまいます。

仮にこれが動作しているとしても、
>変更前HTMLソース一部
>変更後HTMLソース一部
とも、かなり似た内容の処理を行っていますので、処理順序の制御をどうしているかとかも関係してきてしまいそうです。

上の変更前・後のソースとして提示なさっている内容は、javascriptの記述であり、クライアントサイドで実行されるスクリプトです。
「変更」しているとのことですが、(書き方は異なるものの)行われる処理は、「select要素のoptionで一番最後に記されているものだけを残してあとは削除する」という処理なので、この変更を行った意図はよくわかりません。
結果的に、最後のオプションだけが残るので、それがデフォルト選択状態になりますし、他のオプションは存在しなくなるので、ユーザは選択ができない状態になります。
もしも、このような状態を作りたいのであれば、ユーザの選択権はないので、内容固定の要素にするべきとも感じますし、わざわざ表示する必要もなく、場合によっては、hidden要素にしておくのが良いのではとも思います。


全体の仕組みが不明なのもそうですが、質問者様が変更可能なものは何と何で、どの様な制限があって、具体的に何を実現したいのかが伝わるようになさった方が宜しいのではないかと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。

やろうとしていることは、webパスワードマネージャのソフトのような動作イメージです。
表示させたwebページに情報を入力させるような。
その動作がcgiファイルに書かれています。
表示させるwebページが更新されたため、それに対応させるためにcgiを編集したい、という意味での質問でした。

解決すべき問題点は、おそらく回答の中で示していただいた

> 結果的に、最後のオプションだけが残るので、それがデフォルト選択状態になりますし、他のオプションは存在しなくなるので、ユーザは選択ができない状態になります。

この部分が、質問投稿で書いた「cgiの項目選択部分」(ソース)が動作してくれない原因なのかな、とおぼろげながら思っています。
もう少し自分なりに手探りしてみたいと思います。

お礼日時:2019/06/23 09:40

質問のソースは、HTML内にあるJavaScriptです。


だから、「cgi修正で・・・」っていう質問の仕方は間違っています。

動作しない場合、JavaScriptかHTMLのどこかに誤りがあるのでしょう。

JavaScriptって、エラーがあっても、知らんぷりして無視し、何もしないので、エラーの原因が分かりにくいことが多いです。
よーーくソースをチェックしましょう。
    • good
    • 0
この回答へのお礼

ありがとうございます。

元のcgiファイルの作成者が退社して、残された者が頭を悩ませてる、というよくある状況です。
LBOX1から「要素1」って文字が何番目か拾って選択して…と推理しつつ、
新旧のwebページで見た目も内容も全く同じリストボックスなのに、項目が選択できない!なぜだ!?違いは!?・・・と。

cgiファイルを動作させて、
ドロップダウンリストやテキストボックスに対する処理もあるのですが、それはうまく動くようですが、
リストボックスの項目を選択する処理だけがうまくいかないのです。

状況として変更が生じるのは、新旧のwebページだけなので、cgiを修正しなきゃならないって思ってましたが、この考え自体が間違いでしょうか。

お礼日時:2019/06/16 15:37

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