HTML ApplicationsのFromタグと、テキストエリアの困った挙動

なんとなく、うれしいできことがおきたので、テーマを変えてみました。
いままでのよりも、若干こっちのほうが表示エリアが広そうだったので。

で、本題ですが、
HTML Applications (HTA) を業務でちょっとしたユーザインターフェースが、ほしいときによく使います。

でも、このHTAでは、Formタグを切って、INPUT TYPE=text を使うと、
エリア内でエンターキーを押した場合、
セキュリテイの警告ダイアログがでてしまうって問題がありまして。

参考までに興味のある方は、下記をコピーして拡張子をhtaに保存して、テキストエリアでエンターキーを押してください。事象が再現できるとおもいます。

<html>
<head>NG</head>
<body>
<form id="frmExample">
<input id="txtExample" type="text" size="100"><br>
</form>
</body>
</html>

上記の事象を回避するには、Formタグをはずせば大丈夫みたいなのをどこかで調べて、
以下のようなメモを残していて、今まで作るときには、Form句を切ってなかったんですよね。

テキストフィールドでEnterを押した時に動くのは、formのsubmitイベントです。
formタグでactionが指定されていないので、submitではHTA自身が再度開かれます。
ところが hta:application の中で navigable="yes" が指定されていないので、
HTAは同じウィンドウの中で開かれず、IEで開かれてしまう。
これが、別ウィンドウが開いてしまう理由です。


navigable="yes" を指定すれば別ウィンドウが開くことは抑えられます。


しかしsubmitイベントは送信後にactionを開くところまでがひとつの機能なので、
空白のaction、つまりHTAがリロードされてしまい、リロードされると入力フィールドがリセットされます。


テキストフィールドでEnterを押すとsubmitされるのは邪魔なので、
formタグは消しておいた方がいいかもしれません。
formタグなしでもinputやbuttonの表示には問題ありませんし、inputのidを直接指定すれば操作もできます。
たとえば fm.cmdtext.value は、formタグを消しても cmdtext.value という形で使えます。

昔のことで、URLはなくなってしまいましたが・・・

そして、microsoft.com technetの例の中にもきってないしみたいな。

【参考URL】
http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/jul07/hey0711.mspx


で・・・


さっき、Javascriptの勉強をしていて思ったんですが、
onsubmit イベント に、return false; ってしてやれば、うまくいくんじゃないか?
ってことでやってみたら、大正解!!

参考までに興味のある方は、下記をコピーして拡張子をhtaに保存して、テキストエリアに何か入力して、エンターキーを押してください

<HTA:APPLICATION
    NAVIGABLE="yes"
/>
<html>
<head>
</head>
<body>
<form id="frmExample" onsubmit="return false;">
<input id="txtExample" type="text" size="100">
</form>
</body>
</html>

別の勉強していて、長年の疑問が解消されました。
今日は、もういいことが起こらない気がするのは気のせいですよね・・・