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

从笔试到入职,再到成为团队的技术支柱,作者分享了他在不同公司担任程序员的经历。通过对比甲乙方的工作环境和技术成长路径,提出了一个理想的程序员职业发展路线。
笔试安排的排场挺大,借了个学校当考场,总局也在招人,咱下属公司就跟着一起招了。几百人参加的样子了。java基础题,半个多小时就做完了,也不想提前交卷,因为就是俺的直接领导在监考,等一个哥们交卷后,我才装模作样的交卷。领导估计先看的都是我俩卷子,呵呵,最后我跟这位哥们一起作为java工程师加入公司。能给人留下第一印象才会有机会,很多面试都是这样。补充一下,试卷印刷的可正规了,跟高考试卷一样,带密封的。估计是跟着总局一起,就比较正式吧。

回来后,领导为了检验我在外一年的学习成果,专门安排我对大家进行jbpm和drools的培训,其实也就是我试用期的主要工作吧。两个月的时间,公司技术部的同事每周听我讲一次,然后做例子。这两个月也使我从原来只管自己任务的程序员,变成一个大家遇到技术问题就找的万金油。除了软件部经理,大家有问题也都会找我解决,挺自豪的,呵呵。

日子就这么不紧不慢的过着,待遇较之上家有了不小的提高,感到一切都是那么的满足。加之公司有一个鼓励个人学习新技术的氛围,上家公司虽然也提倡,但是繁重的任务使得你没有时间来考虑更新自己的知识,把程序员当成一个代码机器,任务汇报细化到半天,工作相当机械。而现在我可以随意调配自己的时间,白天可以上网看帖子一天,晚上在公司加班完成当天任务,一周找有状态的几天做事,剩下随便自己玩,干自己想干的事情。

自己的时间宽松了,就可以为公司想开辟新的业务方式,在此期间,我向领导提出不少开展新业务的建议,虽然近期无法实施,但是可以为公司以后发展多准备些路子,大有裨益。所以我觉得不能把程序员限制太死,要不你永远跟不上那些看似宽松的公司,比如google。有时候程序员的一个灵感,就可以开辟一大片天地。

自己也经历了甲方乙方,感觉是这样:甲方程序员技术成长较为缓慢,当你技术到一定层面后,需要丰富自己的业务知识,就是你本公司的盈利业务,待遇普遍比乙方好,但是技术不会有多大成就,就是应用。而乙方呢,头几年锻炼人比较快,但是当你工作久后,特别是一个已经成型的公司,你会有一个天花板,项目经理在头上,架构师又没有离职,你还肯老是干程序员,拿着比新人多不了多少的工资不?此时应该考虑下个人的职业规划了,毕竟我们的青春没有几年,热爱技术,但是技术不热爱程序员啊!

理想状态:应届毕业-->乙方程序员三年-->甲方程序员(最好带点国有性质)-->复合型人才.可能这条路比较适合我吧,以上是我的职业经历,不长,但是可以引起点思考吧。以后的路未知,但是我们还是相信这一句话:天道酬勤!
<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有requiredlay-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的选项值只有12,现在复选框的值也是12,所以选项值保持一致。 但是,如果原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>`)转换为复选框(勾选形式),需使用HTMLCSS重写结构,并添加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、付费专栏及课程。

余额充值