小功能:下拉框里为不同的7天,复选框里为旅游点,每一天可以选择多个旅游点,每一天已选择的点其他天不能选,切换下拉框,当天选择好的点为以勾选状态

首先建表:主要有3表,1、行程点表,字段:行程点ID(id)、景点名称(title)、景点内容(content)。

   2、资讯表:每条资讯对应不同的时间和景点。字段:资讯ID(id)、资讯标题(title)、资讯内容(content)。

   3、行程表:字段:行程ID(id)、资讯表ID(zxid)、行程点ID(xcdid)、时间(days)。

控制器代码:public function ltinerary_setting(){
if(IS_POST){
$xcdid = $_POST['xcdid2'];//获取post过来的行程点ID
$arr = explode("/", $xcdid); //因为视图那边传过来的是由/拼接起来的行程点ID,要把它们转化成数组行程点

       //因为某条资讯下的某一天的行程点可能会多次重复添加,所以每次添加之前会把之前添加的删掉

M('ltinerary_setting')->where(array('zxid'=>$_GET['zxid'],'days'=>$_POST['days']))->delete();

//因为行程点ID可能为一个或多个,所以要用foreach循环添加一次或多次
foreach($arr as $k=>$v){
$data['days'] = $_POST['days'];
$data['zxid'] = $_GET['zxid'];
$data['xcdid'] = $v;
$res=M('ltinerary_setting')->add($data);
}
if($res){
$this->success('添加成功!');
}else{
$this->error('添加失败!');
}
}else {
$zxid = $_GET['zxid'];
$news = M('System_trip')->select();
$this->assign('news',$news);
$this->assign('zxid',$zxid);
$this->display();
}
}
public function ajaxgetDate(){
$zxid=$_REQUEST["zxid"];
$d=$_REQUEST["d"];
//1获取到所有的行程点
$all = M('System_trip')->field('id,title')->select();
//2将行程点根据时间做过滤 比如选择的时间是day1 就需要将day1以外的那些已经被选中的行程点排除掉

//非当天所有已添加的行程点
$map_n['zxid']=array('eq',$zxid);
$map_n['days']=array('neq',$d);
$list_n = M('ltinerary_setting')->where($map_n)->select();
$ids=array();
foreach($list_n as $k=>$v){
$ids[]=$v['xcdid'];
}
//var_dump($ids);
//var_dump($list_n);


foreach($all as $k=>$v){
if(in_array($v['id'],$ids)){
unset($all[$k]);
}
}
//3找出day1的选中的点,设置状态
//当天所有已添加的行程点
$map_c['zxid']=array('eq',$zxid);
$map_c['days']=array('eq',$d);
$list_c = M('ltinerary_setting')->where($map_c)->select();
foreach($list_c as $k=>$v){
$idc[]=$v['xcdid'];
}
//var_dump($idc);
foreach($all as $k=>$v){
if(in_array($v['id'],$idc)){
$all[$k]['checked']="checked = 'checked'";
}else{
$all[$k]['checked']="";
}
}
foreach($all as $k=>$v){
$data[] = $v;
}
exit(json_encode(array('error_code'=>0,'error_reason'=>'获取成功','result'=>$data)));
//var_dump($all);
}


视图:<form id="myform" method="post" action="__SELF__" frame="true" refresh="true">

<table cellpadding="0" cellspacing="0" class="frame_form" width="100%">
<tr>
<th width="80">时间</th>
<td>
<select name="days"  id="mySelect" >
<?php
for($i=1;$i<=7;$i++){
?><option value="<?php echo $i?>">第<?php echo $i?>天</option><?php
}
?>
</select>
</td>
</tr>
<tr>
<th width="80">行程点</th>
<td>
<input type="hidden" name="xcdid2"/>
<input type="hidden" id="zxid" value="{pigcms{$zxid}"/>
<div id="returngetData">

</div>
</td>
</tr>
</table>
<input id="setting" type="submit" value="设定"/>
</form>


<script type="text/javascript">

function sub(d){
var zxid=$("#zxid").val();
//获取到时间
htmlObj=$.ajax({
url:"http://localhost/admin.php?g=System&c=Systemnews1&a=ajaxgetDate",
data:{"zxid":zxid,"d":d},
type: "POST",
dataType:"json",
success: function(msg){  
var result = msg.result;
$('#returngetData').empty();

for(var i=0;i<result.length;i++){
$('#returngetData').append("<input type='checkbox' name='xcdid' " + result[i]['checked'] + " value='"+result[i]['id']+"' />"+"&nbsp;&nbsp;"+result[i]['title']+"<br>");
}
}
},'json');


}



$(document).ready(function(){
$('#mySelect').change(function(){
//alert($(this).children('option:selected').val());
var d = $(this).children('option:selected').val();
sub(d);
//var p1=$(this).children('option:selected').val();//这就是selected的值
});
sub(1);

$("#setting").click(function(){
var id_array=new Array();  
$('input[name="xcdid"]:checked').each(function(){  
id_array.push($(this).val());//向数组中添加元素  
});  
var idstr=id_array.join('/');//将数组元素连接起来以构建一个字符串  
//alert(idstr); 
$('input[name="xcdid2"]').val(idstr);
});
})

</script>



这个功能就实现了。。。。。

您好,以下是一个简单的实现方法: 1. 在 Qt Designer 中添加一个下拉框(QComboBox),并设置其下拉项(QComboBox::addItems())。 2. 在下拉框的槽函数(QComboBox::currentIndexChanged())中,获取当前中的下拉项,并根据项内容动态生成相应数量的复选框(QCheckBox)。 3. 将生成的复选框添加到一个 QVBoxLayout 布局中,然后将该布局设置为下拉框下拉部分(QComboBox::setView())。 下面是一个简单的示例代码: ```cpp #include <QtWidgets> class ComboBox : public QComboBox { Q_OBJECT public: ComboBox(QWidget *parent = nullptr) : QComboBox(parent) { connect(this, SIGNAL(currentIndexChanged(int)), SLOT(updateView())); } private slots: void updateView() { const QString text = currentText(); const QStringList items = text.split(',', Qt::SkipEmptyParts); QLayout *layout = new QVBoxLayout(); for (const QString &item : items) { QCheckBox *checkbox = new QCheckBox(item.trimmed()); layout->addWidget(checkbox); } QFrame *frame = new QFrame(this); frame->setLayout(layout); setView(frame); } }; ``` 在使用时,只需创建一个 ComboBox 对象,并添加下拉项即可: ```cpp int main(int argc, char *argv[]) { QApplication a(argc, argv); ComboBox comboBox; comboBox.addItems({"Option 1", "Option 2", "Option 3"}); QWidget w; QVBoxLayout *layout = new QVBoxLayout(); layout->addWidget(&comboBox); w.setLayout(layout); w.show(); return a.exec(); } ``` 注意:由于每次下拉框项改变时都会重新生成复选框,因此可能会影响程序性能。如果项数量较多,建议使用 QListView 或 QTreeView 等控件替代 QComboBox。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ougexingfuba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值