2014-02-21 2 views
2

Я новичок в grails, и я пытаюсь вставить другой элемент текстового поля в форму при заполнении первого поля. Я пытаюсь выполнить действие remoteFunction для вызова шаблона но шаблон не вызывается. Если я изменю «g: textField» на параметр «g: select», я получу раскрывающийся список, но не хочу раскрывать окно.

Моя идея состоит в том, чтобы иметь поле имени и когда оно заполняется, оно должно содержать другое имя, которое будет введено под первым. Я не хочу жестко кодировать несколько полей имени в форму.

Мои View--

<tr class="prop"> 
<td valign="top" class="name"> 
<label for="casStudent_1"><g:message code="casawards.casStudent_1.label" default="Student #1" /></label> 
</td> 
<td valign="top" class="value ${hasErrors(bean: casawardsInstance, field: 'casStudent_1', 'errors')}"> 
<g:textArea onchange="${remoteFunction(action: 'create2' controller="casawards", 
update: 'casStudent_2', 
params: '\'timeName=\' + this.value')}" 
name="casStudent_1" valueMessagePrefix="casawards.casStudent_1" 
value="${casawardsInstance?.casStudent_1}" /> 
</td> 
</tr> 

контроллер -

def _create2 = { render (template:"create2") } 

шаблона (create2) -

<tr class="prop"> 
<td valign="top" class="name"> 
<label id = "casStudent_2" for="casStudent_2"><g:message code="casawards.casStudent_2.label" default="Student #2" /></label> 
</td> 
<td valign="top" class="value ${hasErrors(bean: casawardsInstance, field: 'casStudent_2', 'errors')}"> 
<g:textField name="casStudent_2" value="${casawardsInstance?.casStudent_2}" /> 
</tr> 

Любое руководство будет оценено.

+1

Зачем вам нужно перейти на сервер, чтобы создать новое поле? Вы можете легко манипулировать DOM с помощью javascript. Существует ли какая-либо обработка на стороне сервера, прежде чем вы вставляете второе поле? – aldrin

+0

Я новичок и не знаю javascript, чтобы вставить поле. Можете ли вы его предоставить? – spk2bruce

+0

попробуйте эту ссылку для получения помощи http://stackoverflow.com/q/9630854/74057 – aldrin

ответ

0

Параметр 'update' в вашем remoteFunction должен указывать на существующий элемент DOM. В вашем случае будет вызван вызов «casawards/create2», и ответ будет установлен как содержимое и существующий элемент DOM с идентификатором «casStudent_2». Вы уверены, что этот элемент существует в вашей DOM?

Другая проблема заключается в том, что onChange вызывается, когда вы перемещаете фокус из текстового поля. Попробуйте щелкнуть в другом месте на странице и посмотреть, сделан ли вызов.

+0

Элемент casStudent_2 определен в классе домена. Для onchange я пытаюсь отключить фокус и с помощью табуляции, и нажав на следующее поле с тем же эффектом, что и ничего, новое поле не вставлено. – spk2bruce

+0

Что вы подразумеваете под «Элемент casStudent_2 определен в классе домена»? Перед вызовом ajax вам нужно иметь элемент DOM с идентификатором «casStudent_2». Для меня это выглядит так, что у вас есть метка с идентификатором «casStudent_2», и это тоже в ответе первого запроса ajax. Попробуйте добавить

rght после вашего g: textArea – Amit

Смежные вопросы