2011-10-14 93 views
0

我需要根據用戶在g:select中選擇的值,使用服務器上的值更新textField的值。代碼:grails select with remoteFunction,可以更新g:textField嗎?

<g:select name="description" from="${momentum.MoneyTransType.prodList}" value="${moneyInstance?.description}" 
       noSelection="['':'-Select Description-']" onChange="${remoteFunction(action:'setHowMuch', update:[success:'howMuch', failure:'failure'], 
       params:'\'selection=\' + this.value', options=[asynchronous:false])}"/> 

<g:textField id="howMuch" name="howMuch" value="${moneyInstance?.howMuch}"/> 

這不起作用。如果我給出「更新:[成功:」div ID,一切都很好,但那不是我想要的。我需要允許用戶輸入一個自由流程描述(我將在另一個文本框中輸入)以及一個自由流量。我想我可以隱藏一個div,然後通過jQuery監聽該div的更改,然後更新textField的數量。我應該能夠使用remoteFunction「更新」功能或使用其他grails功能來更新textField嗎?

奇怪的是,投入臨時「toHide」 DIV與jQuery的變化功能不能正常工作,以更新文本框,即以下警報等,在不觸發:

 $('#toHide').change(function() { 
      alert(" I got changed, value:"); 
      $("#howMuch").text($(this).val()); 
     }); 

回答

1

好了,經過寫下所有,我重讀你的問題,並看到你說你知道它適用於一個div。所以我的答案的其餘部分可能沒有幫助,但使用div有什麼問題?一個空的div不會顯示任何東西,所以你不需要隱藏它。所以FWIW:

  1. 把你的<g:textField ...>放在一個模板中。
  2. 在你想要渲染模板的地方添加div。在其他 也就是說,隨着<div id=updateme name=updateme></div>

  3. 在你setHowMuch行動取代目前<g:textField ..>,呈現模板。

例如,我做的:

鑑於:

<g:select class='setTagtypeValue-class' 
      name='tagtype-${i}-header' 
      from="${org.maflt.ibidem.Tagtype.list(sort:'tagtype').groupBy{it.tagtype}.keySet()}" 
      value="${setTagtypeValue?.tagtype?.tagtype}" 
      valueMessagePrefix="tagtype" 
      noSelection="${['null':'Select One...']}" 
      onchange="${remoteFunction(action:'options', update:'tagtype-options-${i}', 
        params:'\'tagtype=\' + this.value +\'&i=${i}\'')}" /> 

控制器動作:

def options = { 
    def i = params.i ?: 0 
    def tagtypes = Tagtype.findAllByTagtype(params.tagtype) 

    render(template:"tagtypeList", model:[tagtypes:tagtypes,i:i]) 

} 

tagypeList模板:

<table> 
    <tr> 
    <th></th> 
    <th><g:message code="tagtype.lookup" 
        default="Lookup Table" /></th> 
    <th><g:message code="tagtype.regexpression" 
        default="Field Rule" /></th> 
    <th><g:message code="tagtype.uicomponent" 
        default="UI Component" /></th> 
    </tr> 
    <g:each in="${tagtypes}" var="tagtype" status="j"> 
    <tr> 
    <td><g:radio name="setTagtypesList[${i}].tagtype.id" value="${tagtype.id}" 
      checked="${(setTagtypeValue?.tagtype?.id == tagtype.id || 
          (!setTagtypeValue?.tagtype?.id && j==0))}"></g:radio></td> 
    <td>${tagtype.lookupTable}</td> 
    <td>${tagtype.regexpression}</td> 
    <td><g:message code="${'uicomponent.' + tagtype.uicomponent.id}" 
        default="${tagtype.uicomponent.uicomponent}" /> 
    </td>        
    </tr> 
    </g:each> 
</table> 

此代碼來自http://www.maflt.org/products/Ibidem中的元數據集(稱爲UI中設置的字段)屏幕。

+0

謝謝布拉德。最終用戶將數額輸入到他們希望收費的文本字段中。一般來說,這應該來自於他們在列表中選擇的描述的結果,但它不必 - 即列表中的一個選項是「其他」。在「其他」的情況下,我還會出現一個自由​​格式的文本字段,以便他們可以輸入費用的描述(而不僅僅是金額)。 – Ray