selected多次点击不生效

本文探讨了在不刷新页面的情况下,使用selected属性设置表单下拉选项为选中状态时遇到的问题及解决方案。通过添加autocomplete=off属性和使用jQuery的.prop()方法,确保了selected属性在多次操作后仍然有效。

表单下拉选项使用selected设置选中时,发现第一次默认选中成功,在页面不刷新的情况下操作(比如ajax),虽然selected属性设置了,但是默认选中不生效。

解决办法1

可能是浏览器缓存问题,在HTML中给标签加上autocomplete="off"属性

解决办法2

jQuery中添加selected属性使用.prop("selected",true)进行添加。

错误操作:用attr $("#is_open").find("option[value = '"+is_open+"']").attr("selected",true);此时操作后,F12有明显的调试信息,但是多次操作后selectes不生效

正确操作:用prop $("#is_open").find("option[value = '"+is_open+"']").prop("selected",true)

此时F12调试信息看不出已经选择,但是页面显示数据是正确的,而且不怕多次操作。

因为attr多用于自定义标签

转载于:https://www.cnblogs.com/cheng6018/p/8516292.html

<think>我们正在解决FomanticUI中多选下拉菜单的onChange事件不触发的问题。根据用户描述,问题出现在设置了multiple属性的<select>元素上。下面将详细分析原因并提供解决方案。##问题分析在FomanticUI中,当使用多选下拉菜单(即设置了`multiple`属性)时,直接使用原生的`onchange`属性或通过jQuery的`.change()`绑定事件可能无效。这是因为FomanticUI使用自己的事件系统来管理下拉菜单的状态。##正确绑定onChange事件的方法必须通过FomanticUI的初始化配置来设置`onChange`回调函数。###完整示例代码```html<!--HTML结构--><selectclass="uifluiddropdown"multiple><optionvalue="">选择技能</option><optionvalue="html">HTML</option><optionvalue="css">CSS</option><optionvalue="javascript">JavaScript</option></select><script>//初始化下拉菜单并绑定onChange事件$('.ui.dropdown').dropdown({onChange:function(value,text,$selectedItem){//多选模式下value是数组(即使只选一个也是数组)console.log('当前选中的值:',value);console.log('当前选中的文本:',text);console.log('选中的DOM元素(多选时是数组):',$selectedItem);}});</script>```###关键点说明1.**多选模式下的参数特点**:-`value`:总是数组类型,包含所有选中项的value值(例如:`['html','css']`)-`text`:总是数组类型,包含所有选中项的文本(例如:`['HTML','CSS']`)-`$selectedItem`:jQuery对象数组,包含所有选中的选项元素2.**事件触发时机**:-当选择发生改变时(增加或减少选择项)-通过代码调用`$('.dropdown').dropdown('setselected',values)`也会触发##常见错误及修复###错误1:使用原生onchange属性```html<!--错误示例:这样绑定不会触发--><selectclass="uidropdown"multipleonchange="console.log('changed')">```**修复**:必须通过初始化配置设置回调函数。###错误2:通过jQuery绑定change事件```javascript//错误示例:这样绑定的事件不会触发$('select').change(function(){console.log($(this).val());});```**修复**:使用FomanticUI提供的`onChange`回调。###错误3:在初始化之前绑定事件```javascript//错误示例:事件绑定在初始化之前$('select').on('change',handler);$('.ui.dropdown').dropdown();```**修复**:无需单独绑定,直接在初始化配置中设置。##获取当前选中值的方法在事件外部获取值:```javascript//获取当前选中的所有值(数组)constvalues=$('.ui.dropdown').dropdown('getvalue');console.log(values);//例如:['html','css']//获取当前选中的所有文本(数组)consttexts=$('.ui.dropdown').dropdown('gettext');console.log(texts);//例如:['HTML','CSS']```##动态修改选项后刷新如果动态添加/删除选项,需要刷新组件:```javascript//添加新选项$('select').append('<optionvalue="vue">Vue.js</option>');//刷新下拉菜单$('.ui.dropdown').dropdown('refresh');```##服务器端取值表单提交时,多选值会自动以数组形式传输(同名参数重复):```skills=html&skills=css&skills=javascript```在服务器端按数组接收即可(如PHP的`$_POST['skills']`自动转为数组)。##注意事项1.**组件初始化**:确保在DOM加载完成后初始化```javascript$(document).ready(function(){$('.ui.dropdown').dropdown({/*配置*/});});```2.**多次初始化**:避免重复初始化同一个下拉菜单3.**事件冒泡**:FomanticUI的`onChange`已处理好事件冒泡,无需额外干预[^1]:FomanticUIDocumentation-Dropdown§§相关问题§§1.如何在FomanticUI下拉菜单中实现远程数据加载?2.FomanticUI下拉菜单的onChange事件如何阻止默认行为?3.如何自定义FomanticUI多选下拉菜单的选中项显示样式?4.FomanticUI下拉菜单在移动端无法滚动怎么办?5.如何重置FomanticUI下拉菜单的选择状态?</think>### 解决 Fomantic UI 多选下拉菜单 `onChange` 事件不触发的问题 在 Fomantic UI 中,当使用多选下拉菜单(带 `multiple` 属性)时,直接绑定原生 `onchange` 事件可能无效。这是因为 Fomantic UI 使用自己的事件系统管理下拉组件。以下是完整解决方案: #### 正确的事件绑定方法 ```html <select class="ui fluid dropdown" multiple> <option value="html">HTML</option> <option value="css">CSS</option> <option value="js">JavaScript</option> </select> <script> // 初始化下拉菜单并绑定onChange回调 $('.ui.dropdown').dropdown({ onChange: function(value, text, $selectedItems) { // 多选模式下value是数组格式 console.log("选中的值:", value); console.log("选中的文本:", text); // 实际应用示例:更新隐藏字段 $('#selected-values').val(JSON.stringify(value)); } }); </script> <!-- 用于表单提交的隐藏字段 --> <input type="hidden" id="selected-values" name="selectedValues"> ``` #### 关键点说明 1. **参数特点(多选模式)**: - `value`: 总是返回数组格式 `["html", "css"]` - `text`: 返回选中项的文本数组 `["HTML", "CSS"]` - `$selectedItems`: jQuery 对象包含所有选中元素 2. **事件触发时机**: - 添加/移除选项时立即触发 - 通过代码设置选中状态时也会触发 #### 常见错误修复 **错误1:使用原生 onchange 属性** ```html <!-- 错误示例:不会触发 --> <select multiple onchange="handleChange()"> ``` **修复**:使用 Fomantic UI 的初始化配置 **错误2:通过 jQuery 绑定 change 事件** ```javascript // 错误示例:不会触发 $('select').on('change', function() { ... }); ``` **修复**:使用 `dropdown({ onChange: ... })` 配置 **错误3:尝试获取错误的值** ```javascript // 错误:返回空字符串 const wrongValue = $('select').val(); // 正确:使用Fomantic API const correctValues = $('.ui.dropdown').dropdown('get value'); // 返回数组 ``` #### 动态操作下拉菜单 ```javascript // 添加新选项 $('select').append('<option value="vue">Vue.js</option>'); // 刷新下拉组件(必须步骤) $('.ui.dropdown').dropdown('refresh'); // 设置选中状态(会触发onChange) $('.ui.dropdown').dropdown('set selected', ['html', 'vue']); // 获取当前选中值(数组格式) const currentValues = $('.ui.dropdown').dropdown('get value'); ``` #### 服务器端处理 表单提交时,数据会以数组形式传输: ```http POST /submit-form selectedValues[]=html&selectedValues[]=css ``` PHP 处理示例: ```php $values = $_POST['selectedValues']; // 自动转为数组 echo implode(', ', $values); // 输出: html, css ``` #### 特殊场景:单选/多选通用解决方案 ```javascript $('.ui.dropdown').dropdown({ onChange: function(value) { // 统一处理:始终转为数组 const values = Array.isArray(value) ? value : [value]; console.log("统一格式的值:", values); } }); ``` [^1]: Fomantic UI 文档 - Dropdown 事件
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值