2012-03-30 39 views
0

私はこのコードで奇妙な行動を抱えている:ボタン「送信」が押されたとき奇妙な問題()

<script type="text/javascript"> 
      function get() 
      { 
       alert("gggg"); 
       jQuery.get (
        "http://localhost:8080/c/portal/json_service", 
        { 
         serviceClassName: "com.liferay.test.service.TrabajadorServiceUtil", 
         serviceMethodName: "findByName", 
         servletContextName: "TrabajadorPlugin-portlet", 
         serviceParameters: "[param]", 
         param : document.getElementById("nombre") 
        } 
       ); 
      } 
</script> 

<div> 
<form> 
    <input type="text" id="nombre" value="<%=searching%>"/> 
    <input type="button" value="Submit" onClick="javascript:get()"/> 
</form> 
</div> 

のLiferayポータルはブロックされます。メッセージ "gggg"が表示されたポップアップが表示されますが、[OK]をクリックするとページがブロックされます。

'param:document.getElementById( "nombre")'という行を削除してもブロックされません。

誰かがエラーをどこに説明できますか、またはこの動作の理由はありますか?事前に

おかげで、

+1

は 'のdocument.getElementById(「ノンブル」)。[値]である必要がありますが、それが失敗の原因かどうかはわかりません。 – Niko

+0

'param'変数に入れたいものは? –

+0

ブロックされているとはどういう意味ですか? –

答えて

4

ラファ問題は、jQueryのは好きでするつもりはないparamための値として全体のDOM要素を渡すためにしようとしているということです。どのタイプの要素にID​​があり、その要素のどのプロパティが必要ですか?それは、入力のいくつかの種類があります場合は、あなたはおそらくvalueプロパティをしたいので、あなたがしたい:

param : document.getElementById("nombre").value 
+0

はい、文字列ですが、.valueが問題でした。ありがとう、7時間働いているだけの問題です。 ;) – agapitocandemor

+0

最後の質問ですが、ポートレットに表示するためにそのコードでgetリクエストを送信した後に、サーバーによって返された値を保存するにはどうすればよいですか?どうもありがとう。 – agapitocandemor

1

更新回答:

もう少し介してこれを考えると、あなたはおそらくでこれを行う必要があります全く違う方法。ユーザーが送信ボタンをクリックしたときにデータを送信していますが、フォームが送信する入力テキストボックスに入力中にユーザーが入力を入力した場合でも、コードはそれをキャッチしません。

より堅牢なソリューションではなく、このようにそれを行うには、次のようになります。

<div> 
    <form id="nombre_search"> 
    <input type="text" id="nombre" value="<%=searching%>"/> 
    <input type="submit" value="Submit"/> 
    </form> 
</div>​ 

<script type="text/javascript" charset="utf-8"> 
    $(document).ready(function() { 
    $("#nombre_search").submit(function(){ 
     $.get("http://localhost:8080/c/portal/json_service", { 
     serviceClassName: "com.liferay.test.service.TrabajadorServiceUtil", 
     serviceMethodName: "findByName", 
     servletContextName: "TrabajadorPlugin-portlet", 
     serviceParameters: "[param]", 
     param : $("#nombre").val() 
     }); 
     return false; 
    }); 
    }); 
</script> 

あなたのコードの変更:

  • は、フォームにIDを追加しました。
  • サブミットボタンは、ボタンの代わりに、buttonとしました。
  • コードは$(document).readyブロック内に配置されています。
  • formが送信されたときにコードが実行されるのは、buttonがクリックされたときではありません。このことができます

希望、 サンドロ

+0

こんにちはサンドロ、あなたの答えに感謝します。私はあなたのコードを貼り付け、onClick = "return get();でエラーを出しています 関数はあなたのコードでもはやget()と呼ばれていませんか?エラーは次のように表示されます: "関数またはメソッドの外部から戻ることはできません。" – agapitocandemor

+0

申し訳ありませんが、私は、コメントされたコードで発生し、私の更新された機能では起こらないと言います。 – agapitocandemor

+1

私は自分の答えを更新しました。 'get'関数が定義されていない理由は、おそらくページ上で宣言されている方法と関係があります。あなたは 'var get = function(){};'や 'window.get = function(){};'の代わりに 'function get(){}'で関数を定義すべきではありません。最後の2つの例は、すべてのブラウザで予測可能です。 – Sandro