【发布时间】:2016-03-02 15:49:54
【问题描述】:
问题: 我有一个动态表单,它使用 JQuery 步骤使其成为向导。现在,有一个步骤是下拉框选择触发 AJAX 调用,然后将表单字段添加到表单中。根据添加的字段数量,我需要该字段所在的 div 的高度变长。
图片: 表单以两个下拉列表开头: 一旦为第二个下拉列表选择了某些内容,就会进行 AJAX 调用并且表单会附加字段。
灰色框应调整大小以适应附加字段。
代码: div 的 CSS 如下:
.wizard > .content
{
background: #eee;
display: table-cell;
margin: 0.5em;
min-height: 35em;
position: relative;
width: auto;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
}
我可以在这里添加一个永久高度,但它不是动态的。
表单是Zend Form,所以HTML如下:
<div class="container-fluid">
<?php if ($this->error) : ?>
<div class="row-fluid">
<?php echo $this->error; ?>
</div>
<?php else : ?>
<?php echo $this->form()->openTag($form); ?>
<h3>Details</h3>
<section>
<?php echo FormElementFactory::create($this, ProjectForm::KEY_PROJECT_NAME, false, true); ?>
<?php echo FormElementFactory::create($this, ProjectForm::KEY_PROJECT_DUE_DTTM, !($this->uberAdmin)); ?>
<?php echo FormElementFactory::create($this, ProjectForm::KEY_PROJECT_DESCRIPTION); ?>
</section>
<h3>Options</h3>
<section>
<?php echo FormElementFactory::create($this, ProjectForm::KEY_REVIEW_PROJECT); ?>
<?php echo FormElementFactory::create($this, ProjectForm::KEY_WTL_PROJECT); ?>
<?php echo FormElementFactory::create($this, ProjectForm::KEY_JOB_TABLE); ?>
</section>
<h3>Project Configuration</h3>
<section>
<?php echo FormElementFactory::create($this, ProjectForm::KEY_PROJECT_TYPES, !($this->uberAdmin), true); ?>
<?php echo FormElementFactory::create($this, ProjectForm::KEY_PROJECT_SUBTYPES, !($this->uberAdmin)); ?>
<?php
echo $this->partial('project/project/dynamicFormElements.phtml', array('form' => $this->projectForm, 'div' => 'project-config-elts'));
?>
</section>
<h3>Workflow Configuration</h3>
<section>
<?php echo FormElementFactory::create($this, ProjectForm::KEY_WORKFLOW_TYPES, !($this->uberAdmin)); ?>
<?php echo FormElementFactory::create($this, ProjectForm::KEY_WORKFLOW_SUBTYPES, !($this->uberAdmin), true); ?>
<?php echo FormElementFactory::create($this, ProjectForm::KEY_PROJECT_WORKFLOW_CONFIG, !($this->uberAdmin)); ?>
</section>
突出显示的 div 是有问题的 div。
我的 AJAX 调用在这里完成:
// Handle AJAX dynamic form creation results
function updateProjectForm(resp) {
$('div#project-config-elts').html(resp.html);
}
// Handle ajax error
function projectFormError(req, status, err) {
var errorString = '<div class="row-fluid alert alert-error">' +
'Error retrieving project form.' +
'</div>';
$('div#project-config-elts').html(errorString);
}
// AJAX request to get dynamic Project config form
function requestProjConfigForm() {
var request = {project_type: $('select[name=project_types]').val(),
project_subtype: $('select[name=project_subtypes]').val()
};
var ajaxOptions = {
url: 'projectform',
type:'POST',
dataType: 'json',
success: updateProjectForm,
error: projectFormError,
data: request
};
// Initiate the request!
$.ajax(ajaxOptions);
}
$('select[name=project_types]').change(function(){
updateProjectSubtypes();
});
// Handle a change in the selection of the particular project
$('select[name=project_subtypes]').change(function(){
requestProjConfigForm();
});
$('select[name=workflow_types]').change(function(){
updateWorkflowSubtypes();
});
$.validator.addMethod("validJSON", function(val, el) {
try {
JSON.parse(val);
return true;
} catch(e) {
return false;
}
}, "*Not valid JSON");
form.validate({
errorPlacement: function(error, element) {
$( element )
.closest( "form" )
.find( "label[for='" + element.attr( "id" ) + "']" )
.append( error );
},
rules: {
project_config: { validJSON: true }
}
});
我想在这里我可以动态改变高度,但我不太确定如何做到这一点。
【问题讨论】:
-
我们实际上也需要您的一些 HTML。您应该针对仅 css 的解决方案。可能从删除溢出开始:隐藏;
-
你能贴出一段代码吗?
-
@HorstJahns 已更新!该表单使用 Zend 框架,因此各个元素的 HTML 是通过 Zend 创建的
-
自动生成的 HTML 可能是问题所在。您应该在 chrome/ff 中调试并尝试更改 css。这是造型问题!如果我们连实际的 html 都没有的话,真的很难找到解决方案。
-
@HorstJahns 好吧,我一直在使用开发工具,并且已经看到更改我在 CSS sn-p 中引用的 div 的高度将完全符合我的要求,它只是不是动态的。所以我只需要弄清楚如何更新那个 div 的高度。我可以发布生成的html
标签: javascript jquery html css ajax