前陣子在處理客戶更改版面的需求時,為了偷懶,結果發現了一個 jQuery 在 IE 上 clone 元素的問題。

先簡單說明一下例子:

如上圖所示,我希望在按下「複製」按鈕後,藍色區塊中的 checkbox 被勾選的項目會被複製到紅色區塊中:

這裡我簡單的使用 jQuery 的 clone 方法來完成它,原始程式如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>測試</title><script type="text/javascript" src="jquery/1.2.6.js"></script><script type="text/javascript">$(function () {$('#copy').click(function () {$('#target').html('').append($('input.test:checked').clone());});});</script></head><body><div id="source" style="border:1px solid #33F; padding: 20px; width: 200px;"><input type="checkbox" name="test[]" class="test" value="1" /><input type="checkbox" name="test[]" class="test" value="2" /><input type="checkbox" name="test[]" class="test" value="3" /><input type="checkbox" name="test[]" class="test" value="4" /></div><br /><div id="target" style="border:1px solid #F33; padding: 20px; width: 200px;"></div><br /><input type="button" value="複製" id="copy" /></body></html>

在非 IE 的瀏覽器上, jQuery 的 clone 方法可以正確的把已勾選的 checkbox 的 checked 狀態複製下來,但在 IE 上卻不行,如下圖:

所以這裡只好針對 IE 再進行一次特別的處理:

$(function () {$('#copy').click(function () {var $checkedValues = $('input.test:checked').clone();if ($.browser.msie) {$checkedValues.attr('checked', true);}$('#target').html('').append($checkedValues);});});

原理很簡單,就是遇到 IE 時,再將複製下來的 checkbox 的 checked 屬性設為 true 即可。

補充:IE6 的逆襲

不過上述程式在 IE6 又會出現問題了,在 IE6 上執行時,會發現 checked 屬性無法正常被設為 true 。

雖然沒有深入去研究,但我猜想是 IE6 在處理 DOM 時的問題,因此我祭出了 setTimeout 大法:

$(function () {$('#copy').click(function () {var $checkedValues = $('input.test:checked').clone();if ($.browser.msie) {setTimeout(function () { $checkedValues.attr('checked', true); }, 0);}$('#target').html('').append($checkedValues);setTimeout(function () {// 其他可能會對處理到 checkbox 的動作}, 0);});});

這裡 setTimeout 可以確保程式在 DOM 完全更新後,再執行下一步的動作。

jQuery 在 IE 上 clone checkbox 的問題。相关推荐

  1. 淺談Raid Cache Memory上應用的問題和實踐

    $1, Raid和Cache Memory 通常,出於二個目標:安全和性能,我們在生產環境的服務器上會設置Raid功能.最常見的場景是,我們會由於安全性的考慮將磁盤設置成Raid 1 或Raid 5. ...

  2. android webview fragment,android studio中Fragment使用webview返回上一頁的問題

    在Fragment中使用了騰訊的X5 webview,雖然好用,但是在Fragment中傳遞消息困難,想要返回上一頁,還得各種消息傳遞什么的,麻煩.可是在Fragment中又不能使用onKeyDown ...

  3. delphi每次mysql密码BDE_关于DELPHI中BDE连接不上ORACLE数据库的問題

    Delphi连接Oracle数据库的三种方式 Oracle是以高级结构化查询语言(SQL)为基础的大型关系数据库,是目前最流行的客户/服务器(CLIENT/SERVER)体系结构的数据库之一,目前被广 ...

  4. 4.3.用python解決經典問題:生日悖論, birthday paradox

    1.問題描述及思路 生日悖論是指 在一羣人中, 出現兩个人(或多个人)的生日在同一天的概率遠比直覺判斷的大得多. 因此也可以解釋爲啥每个班都有人會在同一天過生的現象. 其實從數學上求解這个問題更簡單, ...

  5. jquery radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中

    例:将多个选中的checkbox的值组装成一个字符串 <script type=text/javascript> function addMem(){ //var followers = ...

  6. jQuery操作复选框checkbox技巧总结 ---- 设置选中、取消选中、获取被选中的值、判断是否选中等

    jQuery操作复选框checkbox技巧总结 --- 设置选中.取消选中.获取被选中的值.判断是否选中等 一.checked属性定义 先了解下input标签的checked属性: 1.HTML &l ...

  7. jquery ajax java上传文件_jQuery Ajax方式上传文件的方法

    jQuery Ajax方式上传文件用到两个对象 第一个对象:FormData 第二个对象:XMLHttpRequest 目前新版的Firefox 与 Chrome 等支持HTML5的浏览器完美的支持这 ...

  8. JQUERY获取text,areatext,radio,checkbox,select值

    jquery radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中,及其相关 获取一组radio被选中项的值 var item = $('in ...

  9. ajax 批量上传图片插件,jQuery多文件上传插件jquery.imageuploader.js

    插件描述:jQuery多文件上传插件jquery.imageuploader.js,可以同时上传多个文件并支持拖拽上传 jquery.imageuploader.js 一款jquery多文件上传插件. ...

最新文章

  1. java rectangle获取xy_JFreeChart 动态移动线 并求出两条线交点XY
  2. 来看看如何在 C# 中使用反射
  3. 第一行代码读书笔记1+常见错误分析
  4. Cissp-【第7章 安全运营】-2021-3-15(707页-821页)
  5. 项目案例分享二:密码策略与上次交互式登录
  6. 我发现养生这个梗好像在程序员圈火起来了
  7. 【opencv 学习】【常用的图像卷积核】
  8. python可以实现的小游戏_今天教小白用Python实现一款小游戏!最适合装逼的神技!亲测可用...
  9. 5种样式实现div容器中三图摆放实例对比说明
  10. 分数四则运算法则c语言,△【OJ】(二)---C---分数类的四则运算
  11. UML设计的9种图例
  12. sql批量修改数据_Excel技巧 | 如何批量修改行列数据
  13. Golang编程语言简介 go语言特点
  14. 开箱即用——用模板快速上线一个HR 服务中心
  15. (二)VISIO 中间带箭头的弧线怎么画
  16. 邮件群发软件如何群发邮件,企业邮箱可以吗?
  17. 关于JSP虚拟主机使用(上传自己的网页到外网)
  18. 知识图谱推理:现代的方法与应用
  19. 近世代数概论------整数
  20. JAVAWEB校园二手平台项目

热门文章

  1. 【 FPGA 】Xilinx FPGA器件命名意义?
  2. 初识Tcl(三):Tcl 变量及运算符
  3. 从MATLAB帮助文档上学习 chirp
  4. 缺陷的JIRA管理文档
  5. asp.net调用opencv类库,实现图像处理显示
  6. JSON:如果你愿意一层一层剥开我的心,你会发现...这里水很深——深入理解JSON...
  7. 在JFinal的Controller中接收json数据
  8. (转)OpenCV版本的摄像机标定
  9. 跟小静学CLR via C#(12)-委托Delegate
  10. 在SharePoint Foundation 2010中显示来自其他站点的列表