0

facebox に表示されるフォーム フィールドを検証する必要があります。

問題は、javascript を使用してフィールドの値を取得できないことです。

例: document.form.field_name.value はその値を返しません。

コードサンプル:

<script type="text/javascript">
function validate()
{
  if (document.form1.field.value=='')
{
   alert ("Field cannot be left blank");
}
}

</script>


<form name="form1" onsubmit="return validate()">
<input type="text" name="field" /> 

</form>
4

2 に答える 2

0

Facebox は、表示されている DOM のチャンクをコピーし、ID が重複する要素を効果的に作成します。これは HTML 標準では許可されていません。あなたのJavaScriptは、そのIDによって一意に識別される単一の要素を探して大騒ぎしますが、そのうちの2つを見つけます...

これは、Facebox の大きなバグです。facebox 内のコードには ID を含めないでください。フェイスボックスが公開されたら、すべてのバインディングを更新する必要があります。

于 2012-10-06T03:36:21.493 に答える
0

これを行う方法は、値をフォームから検証コードに直接渡すことです。

<form name="form" id="form" onsubmit="return validate(this.field.value)">
<input type="text" id="field" /> 
</form>

または、次を使用して、フォームなしでテキスト ボックスを使用することもできます。

<input type="text" id="field" 
onkeydown="if (event.keyCode == 13) return validate(this.value)" />

スクリプトを更新して、新しい値パラメーターを許可します。

<script type="text/javascript">
 function validate(val) {
   if (val.length < 1)
   {
      alert ("field cannot be left blank");
      return false; //to stop the default action of submitting the form
   } else {
      alert ("Value: "+val);
      return true; //allow to submit the page
   }
 }

</script>

これは実際には非常に簡単で単純な検証ですが、システムに送信を続行させるかどうかに基づいて、リターン アクションを設定することを忘れないでください。

リモートの html アドレスからか、ローカルに保存された div からか、どこからページをプルしているのかわかりません。したがって、DOM から値を取得するソリューションが機能しない理由がわかりません。通常、jquery を使用して、facebox ウィンドウのさまざまなフィールドから値を取得および設定することに問題はありません。

注: スクリプトを配置する場所に注意する必要があります。アプリケーションによって異なりますが、スクリプトを facebox ページではなくルート ドキュメントに配置したい場合があるかもしれません。これは、リモートの facebox div をロードすると、スコープが変更され、parent.document を参照して親フィールドにアクセスする必要がある場合があるためです。スクリプトはリモートの facebox div に埋め込まれています。

于 2012-09-14T13:24:34.920 に答える