甲方<--->乙方(第二篇)

一名程序员在北京遭遇职场挫折后返回南方,经过一番波折加入一家从事OA业务的公司。在经历同事离职和薪资问题后,最终选择回到原单位继续发展。
在北京决定回南方工作时候,给原单位领导通了个话,领导还是很热情的帮我分析我在北京为什么会出现这样的后果,并表示回来没有问题,随时欢迎。听得我热泪盈眶的,一生难得遇到自己的伯乐,没有想到我是这么的幸运。在又一次被当做出气筒后,一向没有反驳的我,安静地说了一句:“我工作有问题,请说明问题在哪,你骂人我接受不了,我辞职”上司也很硬,拿什么合同压我,要上法院等等,新劳动法我也研究了不少,真法院上见,我肯定赢。公司见我态度很坚决,也没有办法,只好答应。工资一直都没有给我发过,说好我走后给我打到银行卡上,后来也一直没有发,呵呵,不想计较,只想离开这个地狱。
回来后,刚好原单位领导层变动,技术总监也不好提我的事情。匆忙之下,我加入了原单位的一个合作公司,公司主营OA,在本地是一个响当当的公司,政府以及各厅的OA都是该公司的。公司大了,对于程序员的需求就多,加上面试比较顺利,2天搞定签了合同。于是我成为了一名乙方程序员,也是当时我梦寐以求的工作。
进来后,公司有不错的培训机制,有个师傅带着,成长比以前快很多,一个月试用期后,按照公司开发模式做出了个不大不小的模块,然后就加入了项目组。在此后半年的工作中,把公司很多文物级的模块代码,跟同组的3个哥们(挺巧,都是一起毕业的)写了大量的文档,改了大量的BUG,感觉给人擦屁股的滋味真是不好受。一个模块,你可以用一周来开发,但是别人需要几周来读懂,测试,改错误,至此,我认为,良好的代码编写规范和设计,对于一个系统真是太重要了。按照现在有的开发模式,我们可以互换模块,并能很好的熟悉修改。这个地方适合锻炼人,尤其是刚毕业的。
新年来了,发现同组的哥们都有些情绪,尤其是一个竟然不来报到了,后来才知道,已经在深圳另谋高就了,关系最铁的一个周任务也没有完成,吃饭时候问了下,他说,回家了趟,发现人家在外地的都上万每个月,我们就这点钱,丢人!反正都是外地工作,也想换个钱多的城市。过了不久,也走了。我也很矛盾,仔细想了下,凭现在工资,就算项目经理的工资,在这个城市都算少的,程序员在这个城市是不怎么吃香,也有点徘徊。
刚好机会来了,原单位领导给我信息,公司在招人,让我再次一起应聘。机会来了,哈哈,从原单位出来后才发现,同行程序员都十分向往原单位的工作,呵呵,竞争就竞争,我当仁不让!
<think>我们有一个HTML的select元素,需要将其变成一组复选框(勾选)形式。但是原HTML代码中只有两个选项,并且是单选的下拉菜单。 通常,我们可以用一组checkbox来代替select multiple,但这里要求是“勾选”,即多选。原select是单选,所以我们需要改变交互方式。 但是注意:原代码中有一个lay-filter属性,说明可能使用了Layui框架。在Layui中,我们可以使用form.render来重新渲染表单元素。 然而,题目要求将select变成勾选,也就是将下拉选择变成多个复选框。我们可以用以下步骤: 1. 将select元素替换为一个包含多个checkbox的div容器。 2. 每个option对应一个checkbox,并且保留原来的值。 3. 由于原select是必填的,我们也要确保至少有一个被选中(如果需要的话)。 但是,原代码中有一个lay-verify="required",所以我们需要在改变后仍然保持验证。在Layui中,对于复选框组的验证,我们可以使用相同的lay-verify,但是需要将复选框放在同一个容器内,并且给每个复选框设置相同的name(或者使用lay-verify规则)。 然而,Layui的复选框验证要求:一组复选框必须设置相同的name,并且使用lay-verify="required"时,只要有一个被选中即可。 因此,我们可以这样改造: 原代码: <select name="serviceMethod" required lay-verify="required" lay-filter="servicetMethodChange" class="layui-select"> <option value="">请选择服务方式</option> <option value="1">乙方派遣人员到甲方服务</option> <option value="2">乙方选择在___地点,通过电话、邮件传达等形式1把服务结果传送给乙方</option> </select> 替换为: <div class="layui-form-item"> <label class="layui-form-label">服务方式</label> <div class="layui-input-block"> <input type="checkbox" name="serviceMethod" value="1" title="乙方派遣人员到甲方服务"> <input type="checkbox" name="serviceMethod" value="2" title="乙方选择在___地点,通过电话、邮件传达等形式1把服务结果传送给乙方"> </div> </div> 但是注意:原select是必填,且有一个lay-filter用于监听事件。我们还需要: 1. 保留lay-filter,但是checkbox没有这个属性,所以我们可以将lay-filter放在div.layui-input-block上,或者保留在某个元素上以便触发事件。 2. 由于原select有name,我们这里用相同的name(多个checkbox同名),这样在表单提交时,选中的值会以数组形式提交(注意:后台接收可能需要调整,因为原来是单选,现在变成多选数组)。 然而,原代码中选项的值是互斥的,而这里变成了多选。如果业务逻辑上服务方式只能选一种,那么就不能用多选。所以这里需要明确:题目要求是“变成勾选”,但并没有说是否可以多选。从原代码看,是单选下拉框。所以我们需要确认需求。 但是题目描述是“变成勾选”,通常勾选意味着多选,但原代码是单选。这里有两种可能: 1. 需求改变:现在允许多选,那么我们就用多选。 2. 需求是变成单选,但是用复选框的形式(即单选框组),但题目要求是“勾选”,而单选框是圆圈,复选框是方形。所以这里可能是要求多选。 由于题目没有明确,但示例中要求是“勾选”,我们按照多选来实现。 但是,如果业务上只能选一个,那么我们就应该用单选框(radio)而不是复选框(checkbox)。单选框在Layui中也是用类似方式,但type="radio"。 重新审题:原代码中两个选项,用户只能选一个(因为select是单选)。现在要求变成勾选,可能意味着允许同时选择多个?但原业务逻辑可能是单选,所以这里需要谨慎。 由于题目没有提供更多业务信息,我们按照多选来实现,但请注意,如果原后台只支持接收一个值,那么需要修改后台。如果题目要求单选,那么应该用单选框。 但是,题目描述是“变成勾选”,在中文里,勾选通常指复选框,所以这里我们使用复选框(多选)。如果实际业务需要单选,那么应该用单选框,但题目没有明确,我们就按照多选来设计。 因此,我们使用复选框(checkbox)来替换原select。 另外,原select有一个初始选项“请选择服务方式”,我们不需要了,因为复选框不需要占位符。但是必填验证需要至少选一个。 具体步骤: 1. 移除原select元素。 2. 创建新的div容器,按照Layui的复选框结构构建。 3. 每个复选框都要设置lay-skin属性(如果需要样式)以及title(显示文本)。 4. 由于原select有lay-filter,我们将其转移到复选框的容器上,这样当复选框改变时,我们可以通过监听这个容器来触发事件。 5. 重新渲染表单,因为动态添加的元素需要渲染。 但是,我们也可以保留原name,但注意:原name是serviceMethod,现在多个复选框使用同一个name,在Layui中,这样提交的数据会是value的数组,例如serviceMethod: [1,2] 如果原后台只支持接收一个值(即单选),那么这样修改会导致问题。但题目没有说明,所以我们假设允许接收多个值。 代码实现: 由于题目没有说明使用什么技术(如jQuery),我们直接给出替换后的HTML代码,并说明需要重新渲染。 替换后的HTML: 注意:原select的class是"layui-select",我们替换后应该使用layui-form的样式,所以外层用layui-form-item,内层用layui-input-block。并且每个复选框用input[type=checkbox]并设置title。 同时,为了保持验证,我们在div.layui-input-block上添加lay-verify="required"(因为原select有required和lay-verify="required")。但是注意:Layui的复选框组验证,需要将lay-verify放在每个复选框上?实际上,Layui的验证规则是放在表单元素上的,对于复选框组,我们可以将验证规则放在任意一个复选框上,或者放在容器上?根据Layui文档,验证规则放在每个需要验证的表单元素上。 因此,我们在每个复选框上添加lay-verify="required",但是这样会每个都验证,而且只要有一个选中,验证就通过。但是这样写多个,验证规则会触发多次。所以,我们只在其中一个上写lay-verify="required"即可,因为一组复选框,只要有一个被选中,就满足条件。 但是,Layui的验证规则要求同一组的复选框使用同一个验证规则,并且放在任意一个上即可。所以我们可以这样写: 修改后: <div class="layui-form-item"> <label class="layui-form-label">服务方式</label> <div class="layui-input-block"> <input type="checkbox" name="serviceMethod" value="1" title="乙方派遣人员到甲方服务" lay-filter="servicetMethodChange" lay-verify="required"> <input type="checkbox" name="serviceMethod" value="2" title="乙方选择在___地点,通过电话、邮件传达等形式1把服务结果传送给乙方"> </div> </div> 注意:我们将原select的lay-filter移到了第一个复选框上,因为lay-filter需要绑定在具体的表单元素上,以便监听变化。但是,我们也可以将lay-filter放在每个复选框上,这样任何一个改变都会触发同一个事件。 另外,原select有class="layui-select",我们不再需要,因为复选框的渲染使用layui-form。 最后,在动态替换后,需要执行一次表单渲染: form.render(); 但是,如果是在页面加载时就存在,则不需要。如果是动态替换,则需要在替换后执行。 总结:我们将原select替换为上述的div结构,并在页面中执行form.render('checkbox')来重新渲染复选框。 但是,原代码中有一个“请选择服务方式”的选项,我们不需要了,所以直接去掉。 注意:原select是必填,现在复选框组也是必填(通过lay-verify="required"实现),所以验证逻辑保留。 由于原select的选项值只有1和2,现在复选框的值也是1和2,所以选项值保持一致。 但是,如果原JavaScript代码中有监听servicetMethodChange事件,那么现在需要调整,因为事件触发对象变了。原事件处理函数可能是根据select的值来处理的,现在变成了多个复选框,事件处理函数需要修改为获取所有选中的复选框的值。 因此,除了替换HTML,还需要检查相关的JavaScript代码,调整事件处理函数。 由于题目没有给出相关事件处理函数,我们只做HTML结构替换。 所以,最终替换后的代码为: <div class="layui-form-item"> <label class="layui-form-label">服务方式</label> <div class="layui-input-block"> <input type="checkbox" name="serviceMethod" value="1" title="乙方派遣人员到甲方服务" lay-filter="servicetMethodChange" lay-verify="required"> <input type="checkbox" name="serviceMethod" value="2" title="乙方选择在___地点,通过电话、邮件传达等形式1把服务结果传送给乙方"> </div> </div> 然后,在页面中执行: <script> layui.use('form', function(){ var form = layui.form; form.render('checkbox'); // 渲染复选框 }); </script> 注意:如果原页面已经加载了layui.form,并且已经渲染,那么动态添加后需要重新渲染。 但是,原select被替换,所以我们需要在替换后立即执行渲染。 另外,由于原select有required属性,我们将其替换为在其中一个复选框上设置lay-verify="required",这样验证规则依然有效。 最后,如果原表单提交时,serviceMethod字段的值是单个值,而现在变成了数组,后台需要调整。但这是业务需求改变,不在本题范围内。 因此,我们完成了从单选下拉框到多选复选框组的转换。 但是,如果业务要求只能选一个,那么我们就应该用单选框(radio)组。如果题目要求是单选,那么请将上面的type="checkbox"改为type="radio",并且每个radio的name相同,这样就能实现单选。同时,验证规则也可以放在任意一个radio上(lay-verify="required")。 由于题目要求是“勾选”,而单选框在Layui中默认是圆形,复选框是方形(勾选样式)。所以这里按照多选(复选框)来实现。 但是,如果业务要求是单选,那么题目描述可能不准确。根据原代码,是单选,所以这里我们保留两种可能性,但按照多选来实现。 如果实际是单选,那么替换代码如下(用单选框): <div class="layui-form-item"> <label class="layui-form-label">服务方式</label> <div class="layui-input-block"> <input type="radio" name="serviceMethod" value="1" title="乙方派遣人员到甲方服务" lay-filter="servicetMethodChange" lay-verify="required"> <input type="radio" name="serviceMethod" value="2" title="乙方选择在___地点,通过电话、邮件传达等形式1把服务结果传送给乙方"> </div> </div> 然后同样需要渲染:form.render('radio'); 由于题目没有明确,我们给出两种方案,但根据原题“变成勾选”更倾向于复选框(多选),所以最终我们采用复选框方案。 但是,原题中的示例代码是单选下拉框,所以这里我们决定权交给用户。如果用户要求多选,就用复选框;如果要求单选,就用单选框。 然而,题目没有明确,所以我们按照多选(复选框)来回答。 因此,最终答案如下: 替换后的代码(多选):</think>要将下拉选择框(`<select>`)转换为复选框(勾选形式),需使用HTML和CSS重写结构,并添加JavaScript交互。以下是实现代码: ```html <div class="checkbox-group"> <!-- 单个复选框项 --> <label class="checkbox-item"> <input type="checkbox" name="serviceMethod" value="1" lay-filter="servicetMethodChange"> <span>乙方派遣人员到甲方服务</span> </label> <!-- 另一个复选框项 --> <label class="checkbox-item"> <input type="checkbox" name="serviceMethod" value="2" lay-filter="servicetMethodChange"> <span>乙方选择在___地点,通过电话、邮件传达等形式把服务结果传送给乙方</span> </label> </div> ``` ```css /* 复选框组样式 */ .checkbox-group { display: flex; flex-direction: column; gap: 12px; } /* 复选框项样式 */ .checkbox-item { display: flex; align-items: center; cursor: pointer; padding: 8px 12px; border: 1px solid #dcdfe6; border-radius: 4px; transition: all 0.3s; } /* 选中状态样式 */ .checkbox-item input:checked + span { color: #1890ff; font-weight: bold; } .checkbox-item input:checked { accent-color: #1890ff; /* 勾选颜色 */ } /* 隐藏原默认复选框 */ .checkbox-item input[type="checkbox"] { margin-right: 8px; width: 16px; height: 16px; } ``` **关键实现说明:** 1. **结构替换**:用`<label>`包裹`<input type="checkbox">`实现点击文本即可勾选 2. **验证保留**:`name="serviceMethod"`和`lay-filter`属性保留原功能 3. **必填验证**:需添加JS验证至少勾选一项(示例代码): ```javascript document.querySelector('form').addEventListener('submit', function(e) { const checked = document.querySelectorAll('[name="serviceMethod"]:checked'); if (checked.length === 0) { e.preventDefault(); alert('请至少选择一种服务方式!'); } }); ``` **效果特点:** - 视觉呈现为卡片式勾选框 - 保留Layui的`lay-filter`事件绑定 - 支持多选(原逻辑为单选需调整JS) - 响应式设计适应不同屏幕
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值