2011-11-10 60 views
1

動態內容,我寫這使得一個<input>當 文本鍵入它發送一個Ajax請求到服務器自動完成JSF自定義組件。結果顯示爲 ,作爲<select><option>標籤。更改事件不觸發對jQuery模態窗口和Chrome瀏覽器

如果我有<custom:autocomplete id="findTeam"/>組件將呈現結構 這樣的:

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

我使用jQuery的<select>讓我知道當一個條目 被從列表中選擇更改事件綁定。這通常工作正常,但當我在使用 鉻瀏覽器(v15.0.874.106 m)時,在jquery ui 1.8.16模式對話框中使用組件時,更改事件不是 。如果對話框不是模態的,它就可以正常工作,並且在IE8 中,它可以與模態對話框一起工作。所以當<select>被渲染時,我點擊 其中一個選項,沒有任何反應 - 它仍然顯示,但我不能選擇任何東西。

我在js控制檯中看不到任何錯誤,我不確定接下來要嘗試什麼。這裏 是來自服務器的Ajax響應的一個示例:使用.live(),而不是.bind()

<?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> 

我試過,但是這並不能幫助,這會是一些 某種安全限制在鉻?感謝您的任何建議。

回答

0

這不是安全限制。您必須在模態箱的生成後重新綁定!

+0

我已經嘗試在dialogopen事件處理程序中重新綁定,但仍然沒有任何反應。我已經在dialogopen處理程序(正在調用中)和listClick()處理程序(不是)中放入警報。有任何想法嗎?當我考慮它時,只有當某些文本輸入到輸入中並且某些結果從服務器返回時,對話框纔會打開,findTeam_listbox不存在。在選擇標記被呈現後,更改事件被綁定。感謝您的答覆。 – Oversteer

相關問題