2011-11-10 20 views
1

をレンダリングするオートコンプリートJSFカスタムコンポーネントを作成しました。 テキストを入力すると、サーバーにajaxリクエストが送信されます。結果は として<select>と表示され、<option>タグと表示されます。jqueryモーダルダイアログとクロムブラウザでダイナミックコンテンツの変更イベントが発生しない

私は<custom:autocomplete id="findTeam"/>をお持ちの場合はコンポーネントは、このような構造 をレンダリングします:

<span id="findTeam> 
    <input id="findTeam_input"/> 
    <select id="findTeam_listbox"> 
    <option ...> 
    </select> 
</span> 

を私はエントリは がリストから選択されたときに知っているので<select>ための変更イベントをバインドするためのjQueryを使用します。これは一般的に問題なく動作しますが、 クロムブラウザ(v15.0.874.106 m)を使用している場合、jquery ui 1.8.16モーダルダイアログボックス内のコンポーネントを使用しているときに、変更イベントは で発生しません。ダイアログがモーダルでなく、IE8で モーダルダイアログボックスで正常に機能する場合は正常に機能します。したがって、<select>がレンダリングされ、 オプションの1つをクリックすると、何も起こりません。表示されたままですが、何も選択できません。

jsコンソールにエラーが表示されず、次に何を試していいのか分かりません。 (代わりに.bindの)私は(.liveを使用してみました

<?xml version='1.0' encoding='UTF-8'?> 
<partial-response> 
    <changes> 
     <update id="findTeam"> 
      <![CDATA[ 
      <script> 
       jQuery(function($){ 
        com.corejsf.ajaxSetup("mojarra.ab('findTeam',event,'change',0,'addButton')"); 
        $('#findTeam').hover(com.corejsf.compFocusSet,com.corejsf.compFocusClear); 
       }); 
      </script> 
      <span id="findTeam"> 
       <input id="findTeam_input" type="text" name="findTeam_input" autocomplete="off" value="tea" /> 
       <script> 
        jQuery(function($){ 
         $('#findTeam_input').bind('keydown','#findTeam_listbox',com.corejsf.inputKeydown); 
         $('#findTeam_input').bind('blur','#findTeam',com.corejsf.compBlur); 
         $('#findTeam_input').bind('keyup',{id:'#findTeam',minChars:3},com.corejsf.inputKeyup); 
         $('#findTeam_input').bind('mousedown','#findTeam',com.corejsf.inputClick);var cid='#findTeam_input'; 
         $(cid).focus().focus().click();$(cid).val($(cid).val()); 
        }); 
       </script> 
       <select id="findTeam_listbox" name="findTeam_listbox" size="10" style="position: absolute"> 
        <option value="cfdb36cd-ebfa-49b9-941e-2a74d7b82aef">Team 5</option> 
        <option value="a206fbbc-552d-4b7b-b2d3-dc1a50f98667">Team 6</option> 
        <option value="bc5f9f1d-ef76-452f-9101-bff703efbf38">Team 7</option> 
        <option value="2a43ff65-d170-45a7-9bf0-ec237d51603d">Team 8</option> 
        <option value="7112ca7d-75ea-4957-a830-7ef7b54e18f5">Team 9</option> 
       </select> 
       <script> 
       jQuery(function($){ 
        $('#findTeam_listbox').position({my:'left top',at:'left bottom',of:$('#findTeam_input'),collision:'fit'}); 
        $('#findTeam_listbox').dropShadow({left:4,top:4,blur:1}); 
        $('#findTeam_listbox').bind('change',com.corejsf.listClick); 
        $('#findTeam_listbox').bind('blur','#findTeam',com.corejsf.compBlur); 
       }); 
       </script> 
      </span> 
      ]]> 
     </update> 
     <update id="javax.faces.ViewState"> 
      <![CDATA[8331589387080754551:-7156357472895110486]]> 
     </update> 
    </changes> 
</partial-response> 

)が、これは助けにはならない、これはセキュリティのいくつかの並べ替え 次のようになります。ここでは は、サーバーからAJAXの応答のサンプルですクロムの制限?ご意見ありがとうございます。

答えて

0

セキュリティ上の制限はありません。モーダルボックスの生成後に再バインドする必要があります!

+0

私はdialogopenイベントハンドラで再バインドを試みましたが、何も起こりません。私はdialogopenハンドラ(呼び出されている)とlistClick()ハンドラ(どちらもない)の両方に警告を出しました。何か案は?それについて考えると、ダイアログが開かれたときにfindTeam_listboxは存在しません。何らかのテキストが入力に入力され、いくつかの結果がサーバーから返されたときだけです。 changeイベントは、selectタグがレンダリングされた後にバインドされます。お返事をありがとうございます。 – Oversteer

関連する問題