【发布时间】:2019-09-06 13:48:19
【问题描述】:
我有 2 个下拉菜单,为了简单起见,假设它们是国家/地区。
<select id="country_id" name = "country_id">
<option value="">Select...</option>
<?php foreach ($countries as $country): ?>
<option value="<?php echo $country->id; ?>" <?php if (null !== set_value("country_id") && set_value("country_id") == $country->id) : echo ' selected '; ?>>$country->name;
<?php endforeach?>
</select>
<select id="state_id" name = "state_id">
<option value="">Select...</option>
</select>
<input type="file" name="attachment_id" value="" />
我所做的是在选择国家/地区时填充各州。这是我使用 AJAX 和“.change”做的,效果很好
我遇到的问题是当我执行 form_validation 和
$this->form_validation->run() == FALSE
然后我使用 set_value 重新加载所有控件,这对于第一个下拉列表(国家)确实有效,但是第二个下拉列表保持为空(因为没有在“country_id”上触发“.change”来填充“state_id”。
同样,我被要求重新附加文件
所以我需要并且不工作的是在 form_validation 失败之后
- 使用数据加载第二个下拉菜单 => 已解决,请参阅下面的 .trigger 事件
- 在第二个下拉菜单中选择上一个选择 => 几乎解决了,但是只有当我使用警报时:)
- 在表单被关闭或成功提交之前,附件仍应保持连接状态 => 未解决
我觉得我需要手动触发数据更改以获得 (1) 但在我的情况下,我有一个 foreach(见上文),我只添加行,如果选择相同,我只需设置为“已选择” " 但之后什么都没有发生。
这里是 AJAX 部分
<script>
$(document).ready(function(){
$("#country_id").change(function(){
$.ajax({
url:"<?php echo base_url(); ?>location/getCountries",
data: {country_id: $(this).val()},
type: "POST",
success: function(data){
$("#state_id").html(data);
$("#state_id").val(null);
}
});
});
<?php if (!empty(set_value('country_id'))) : ?>
var value = "<?php echo set_value('country_id'); ?>";
$('#country_id').val(value);
$('#country_id').trigger('change');
<?php endif; ?>
<?php if (!empty(set_value('state_id'))) : ?>
var value = "<?php echo set_value('state_id'); ?>";
//without this alert the selection doesn't work
alert(value);
$('#state_id').val(value);
$('#state_id').trigger('change');
<?php endif; ?>
});
</script>
所以我只有在使用警报时才会保存这些值。这似乎是一个异步执行,其中第二个下拉菜单的选择是在填充之前完成的,所以最后要做的是弄清楚如何等待。
还要做附件部分
提前致谢!
【问题讨论】:
-
对于select,你可以将选中的状态值存储在本地存储中,重定向后,检查该值是否存在于本地存储中,然后通过jquery设置选中状态。为此,您需要在准备好的文档上调用 ajax 以获取所选国家/地区的状态。但是您应该使用 ajax 提交表单,以便输入保持选中状态。
-
@Marius 你能分享你的代码,比如 ajax 和其他人吗
-
我在问题中也添加了 ajax 部分
标签: codeigniter