2012-05-29 59 views
1

我正在努力實現此選擇的經典功能:元素取決於使用Lift的其他select:選擇。選擇國家並獲得所選國家的可能狀態。(電梯)使用SHtml.select onchange事件提交Ajax

我面臨的問題是,我在select元素的onchange中有的「this.myForm.submit()」沒有觸發ajax請求。如果我使用輸入類型「提交」它完美的作品。

這種行爲與Lift框架有關嗎?使用Lift庫實現這種功能有更好的方法嗎?

相關文檔片斷代碼:

"name=distributionPoints" #> SHtml.select(distributionPoints, Empty, selectedDistributionPoint = _, "id" -> "the_distributionPoints") & 
     "name=devices" #> (SHtml.select(devices, Empty, selectedDevice = _, "id" -> "the_devices") ++ SHtml.hidden(process)) 

的查看HTML:

<form class="lift:form.ajax"> 
<select name="distributionPoints" id="the_distributionPoints" onchange="submit()"> 
        <option></option> 
       </select> 
       <br/> 
       Device: 
       <select name="devices" id="the_devices"> 
        <option></option> 
       </select> 
</form> 

渲染HTML:

<form id="F391649920812YBACEZ" action="javascript://" onsubmit="liftAjax.lift_ajaxHandler(jQuery('#'+&quot;F391649920812YBACEZ&quot;).serialize(), null, null, &quot;javascript&quot;);return false;"> 
       <div> 
Punto de distribución: 
       <select onchange="submit()" id="the_distributionPoints" name="F630704816482OLP514"></select> 
       <br />    
        Equipo: 
        <select name="F391649920817BLRJW5" id="the_devices"></select><input type="hidden" name="F391649920818HPS35E" value="true" /> 
        <br /> 

       </div> 
      </form> 

[編輯]

我終於得到了解決。就像克里斯提到的,我使用ajaxSelect而不是僅僅使用選擇,而不是使用setHtml,而是使用名爲JsCmds.ReplaceOptions的方法來完成我正在尋找的功能。

回答

2

您應該明白,使用Ajax提交時,頁面不會被重新加載。所以我建議你在服務器端使用JsCmds.setHtml來「重置」第二個select元素。

所以,實際上第一個select是一個ajaxSelect,它意在修改第二個(所以它不關心隱藏的提交在我看來)。第二選擇是當第一個被改變更新,使用 'selectPoint(S)'

的Scala代碼件

def selectPoint(s):JsCmd = { 
    selectedDistributionPoint = s; 
    newDevices:List[String] = findCorrespondingDevices(s); 
    JsCmds.setHtml("name=devices", SHtml.select(newDevices, Empty, selectedDevice = _, "id" -> "the_devices")) ++ SHtml.hidden(process)) 
} 

"name=distributionPoints" #> SHtml.AjaxSelect(distributionPoints, Empty, s=> selectPoint(s), "id" -> "the_distributionPoints") & 
"name=devices" #> (SHtml.select(Nil, Empty, selectedDevice = _, "id" -> "the_devices") ++ SHtml.hidden(process)) 

的模板碼片

<input name="distributionPoints" id="the_distributionPoints" onchange="submit()"/> 
<input name="devices" id="the_devices"/> 
+0

我會apreciate更廣泛的解釋。但我的理解是,你推薦我重置整個頁面,而不是重置單個選擇組件。但是我面臨的問題是,我不能通知服務器必須完成ajax操作,因爲我不能使用onchange事件提交表單。 – rsan

+0

只要我訪問我的電腦(平板電腦並不理想),我就會發布解決方案。但setHtml設置頁面的一部分(例如),所以它不會刷新整個頁面。 –

+0

tnx提前兄弟:) – rsan