リストボックスのリサイズがうまくいきません。

[上に] [前に] [次に]
沙羅夜 2000/06/02(金) 11:37:48
はじめまして。沙羅夜ともうします。
今,JAVASCRIPTで空のリストボックスにNew Optionでデータを追加し,その後に
if(document.layers)
{
  window.resizeBy(size,size)
  size*=-1
}
という形でリサイズをかけているのですが,きちんと動作しません。
環境はNN4です。
記述や指定の仕方が間違っているのだと思うのですが
JAVASCRIPTをはじめて1週間足らずでどう違うのかが自分でわかりません。
よろしくおねがいします。

shingo [E-Mail] [HomePage] 2000/06/03(土) 14:12:42
よくわかりませんが、とりあえずsize*=-1するとsizeがマイナスの
値になるように思います。いかがでしょう。

Mugi [E-Mail] [HomePage] 2000/06/03(土) 15:54:11
もしかしてこれ僕のスクリプト?
http://hp.vector.co.jp/authors/VA013453/js/selectbox.htm

あらかじめ size=-1 を定義しておかないとダメですよ。

バギンズ 2000/06/03(土) 17:20:27
なるほどー、ネスケだとOPTIONを追加しても広がらないから
ウィンドウのサイズを微妙に変化させて再表示しているんですかー。
最初が-1ってのもみそですね。
勉強になりました。(^_^)

沙羅夜 2000/06/05(月) 13:46:36
質問者本人なのにレスが遅れて申し訳ありません。
Mugiさん,そうです。
リストボックスのリサイズの方法がどうしてもわからず
ほかの方のリサイズの質問に上記の記述があったので
リサイズの部分は参考にして作ってみたんです。
一言お断りするべきでしたよね。すみませんm(_ _)m

それで,初期値にsize=-1を設定はしているのですが,
リサイズしてくれないのです。

バギンズ 2000/06/05(月) 14:46:02
Mugiさんのところで試してもうまくリサイズされませんか?
私はNC4.6でうまく動きましたが、バージョンの問題?

それとも、自作した方だけうまく動かないのでしょうか?
もしそうなら、もう少しソースを公開してもらわないと
わかりません。

PS.大きなお世話かもしれませんが、ステートメントの最後には
   セミコロン付けたほうがいいかと...

沙羅夜 2000/06/05(月) 16:05:24
バギンズさんアドバイスありがとうございます。
これからはセミコロンをつけるように心がけようと思います。
Mugiさんのところで試してみたのですがきちんとリサイズされたので
私のソースがきちんとできていないのだと思います。
以下が私がつくったソースです。

<HTML>
<HEAD>
</HEAD>
<SCRIPT LANGUAGE="JavaScript">
var size=-1
function changelist()
{
  var obj=document.test.outlist.options
  var wstr=document.test.inlist.options[document.test.inlist.selectedIndex].value.substr(10)
  var wstring=wstr
  var start=0,mojisu=0,cnt=0,i,flg=0
  var text,val
  obj.length=0
   for(i=0;i<wstr.length;i++)
   {
    if (escape(wstring.charAt(i)).length >= 4 )
    {
cnt+=2;
mojisu++
    }
    else
    {
       cnt++;
mojisu++
    }
    if(cnt==10)
    {
if(flg==0)
{
  text=wstring.substr(start,mojisu)
  flg=1
}
else if(flg==1)
{
  val=wstring.substr(start,mojisu)
  flg=2
}
cnt=0
start=i+1
mojisu=0
    }
    if(flg==2)
    {
obj[obj.length]=new Option(text,val)
flg=0
    }
   }
  if(document.layers)
  {
        window.resizeBy(size,size)
        size*=-1
  }
  if(obj.selectedIndex==-1)
     {
            obj.selectedIndex=0
     }
}
</SCRIPT>
<BODY>
<h1>TEST</h1>
<form name="test">
<DT>入力リスト:</DT>
<DD>
<select name="inlist" size="1"  onChange="changelist()">
<option value="数字      12345     半角数字 12345全角数字  ">数字
<option value="文字      abcde     アルファベット あいうえおひらがな ">文字
</select>
</DD>
<BR>
<BR>
<DT>出力リスト</DT>
<DD>
<select name="outlist">
<option></option>
</select>
</DD>
<BR>
<BR>
</form>
</BODY>
</HTML>

あまり見やすいソースではないかもしれませんがよろしく
ご指摘,ご教授のほどよろしくお願いします。

沙羅夜 2000/06/05(月) 16:08:42
気をつけるといったはしから,修正前のソースを送ってしまった(^ ^;スミマセン
あと,表示されてから気づいたのですが,大きいデータを送ってしまって
申し訳ありません。m(_ _)m
以後気をつけます。

バギンズ 2000/06/05(月) 17:41:09
全角でインデントしているのはここにアップするためと判断したとして、
ネスケでのリサイズはきいてると思います。
但し、文字列を分割する処理には問題がありそうですね...

ネスケとIEだと、漢字の扱いが違うから面倒なんですよね...
文字列はカンマ区切りにした方が簡単だと思いますけど...

沙羅夜 2000/06/05(月) 18:20:00
漢字の扱いってIEとネスケだと違うんですか。
ぜんぜん知らなかったです。
バギンズさん,教えてくれてありがとうございます。
調べてみようと思います。
後,このソースのどこを修正すればネスケでリサイズされるか
わかったら,教えてください。お願いします。

バギンズ 2000/06/05(月) 18:34:43
>ネスケでのリサイズはきいてると思います。
はお読みになりませんでしたか?

リサイズ以前に、文字列を区切るほうの問題だと思います。

>文字列はカンマ区切りにした方が簡単だと思いますけど...
の意味が通じてなかったようですが

<option value="数字,12345,半角数字,12345,全角数字">数字
<option value="文字,abcde,アルファベット,あいうえお,ひらがな">文字

って感じでカンマで区切っておき、分割するときは文字列中のカンマを
サーチして区切ったほうが簡単かな?と思うのですが、いかがでしょう?

沙羅夜 2000/06/06(火) 09:11:02
申し訳ありません。なんか的外れなレスをしてしまったみたいですね。

>文字列はカンマ区切りにした方が簡単だと思いますけど..
えっと,使用するデータにはカンマやピリオドもあるので,カンマ区切りは
使えませんが,なにか区切り文字を使用して,indexOfでサーチをかける
ようにプログラムを修正する予定だったのですが,リストボックスのリサイズで
つまずいて手付かずでいました。すっかり忘れてました(^ ^;
アドバイスありがとうございます。

>ネスケでのリサイズはきいてると思います。
読んでいなかったわけではないのですが,
画面上では,データの幅にリストボックスがリサイズされない・・・
プルダウンも一行だけ表示されて使いにくいスクロールバーが
でるだけなのです。
Mugiさんのところではきちんとプルダウンされるのでどうすれば
そのようになるのかな?という意味で
>後,このソースのどこを修正すればネスケでリサイズされるか
>わかったら,教えてください。お願いします。
というように書いてしまったのです。
言葉が足らず申し訳ありませんでした。

Mugi [E-Mail] [HomePage] 2000/06/06(火) 09:39:48
上のソースで動作テストしてみました。
正常にリサイズ&再描画されます。
環境:WinNT+NC4.7
> 修正前のソースを送ってしまった
修正後のソースではリサイズされないということですね?
そのソースを見ないと原因はわからないと思いますよ。

# onload時にリストが空なのはわざと?

沙羅夜 2000/06/06(火) 10:00:26
> 修正前のソースを送ってしまった
いえ,修正したのは,JavaScriptの各行末にセミコロンを
付加しただけです。
そちらの環境では正常に動作するんですか・・・
わたしのところでは,修正前でも修正後でもリサイズされません。
環境はWIN95+NN4.04なのですが。

> onload時にリストが空なのはわざと?
えっと,入力リストの最初に表示されている数字のデータを
changelistの処理を実行させた時と同じように
表示させたいのですが,どうすればロード時に表示させられるかが
わからないので,いま悩んでいる最中です。

Mugi [E-Mail] [HomePage] 2000/06/06(火) 10:16:20
> わたしのところでは,修正前でも修正後でもリサイズされません。
NN4.7jaでもういちど試してみました。
最大化しているときだけ、うまくいきませんね。
var size=-7 にするとうまくいきました。

> どうすればロード時に表示させられるかが
> わからないので,いま悩んでいる最中です。
<body onload=changelist()> とかでいい。
参考になりそうなスクリプト:
http://hp.vector.co.jp/authors/VA013453/js/991130.htm

Mugi [E-Mail] [HomePage] 2000/06/06(火) 10:17:06
訂正:NN4.7ja → NN4.04ja

バギンズ 2000/06/06(火) 10:29:44
NN4.04が何か関係しているのかもしれませんね。

Mugiさんのソースと違うのは、複数行を追加して最後に1回だけ
リサイズ処理をしているとこでしょうか。
Optionを1行追加するごとにリサイズ処理を行なうってのはどうなんでしょう?

Mugi [E-Mail] [HomePage] 2000/06/06(火) 10:40:48
強引な対処法:
var size=n

削除する

window.resizeBy(size,size)
size*=-1

window.resizeBy(-10,-10)
window.resizeBy(10,10)
// リサイズ幅を大きくする代わり2度実行

沙羅夜 2000/06/06(火) 13:18:15
[[解決]]
申し訳ありません。
正常に動作しない原因がわかりました。
今,上記のソースはフレーム分割したエリアにリンクさせて表示させていたので
>if(document.layers)
>{
>  window.resizeBy(size,size)
>  size*=-1
>}
を,
if(document.layers)
{
  parent.window.resizeBy(size,size)
  size*=-1
}
とすることで正常に動作するようになりました。
説明不足で申し訳ありませんでした。

> どうすればロード時に表示させられるかが
> わからないので,いま悩んでいる最中です。

<body onload=changelist()>
の記述できちんと動作しました。

shingoさん,バギンズさん, Mugiさん貴重なお時間を割いて
アドバイスをしていただき本当に感謝しています。
まだまだわからないことばかりなので
これからもお世話になるかもしれませんがよろしくお願いします。
ありがとうございましたm(_ _)m

バギンズ 2000/06/06(火) 13:26:13
なるほど、そーいうことでしたか。

私はこれがきっかけでMugiさんのスクリプトを拝見させていただく
事ができたので満足です。(^_^)

[上に] [前に] [次に]