如何让jquery.dynamiclist适配新版本jQuery(1.11.1)正常运行?
适配jQuery 1.11.1的解决方案
这个问题我之前碰到过,核心原因是jQuery 1.6+版本对attr()方法的行为做了明确调整——旧版里attr("value")还能勉强拿到输入框的实时值,但新版本中它只会返回元素初始化时的value属性值,用户输入的动态内容得用val()方法来获取。咱们分两步来解决:
第一步:修复表单提交的取值逻辑
你提交表单时的取值代码用了element.attr("value"),这就是导致值为undefined的直接原因。把它换成element.val()就行,修改后的代码如下:
(function($) { $(document).ready(function() { $("#example1").dynamiclist(); // 处理表单提交并展示数据 $("form").submit(function(event) { event.preventDefault(); var data = ""; $(this).find("input, select").each(function() { var element = $(this); if (element.attr("type") !== "submit") { data += element.attr("name"); data += "="; data += element.val(); // 关键修改:用val()替代attr("value") data += "; "; } }); alert(data); location.reload(true); }); }); })(jQuery);
第二步:检查插件内部的兼容性(如果第一步还不够)
如果修改后动态添加的输入框还是无法正常取值,那可能是jquery.dynamiclist插件本身依赖了旧版jQuery的API。你可以打开插件源码,做以下检查和修改:
- 查找所有用
attr("value")设置或获取输入框值的地方,全部替换成val() - 如果插件用了已废弃的
live()方法,改成on()(1.11.1还兼容bind(),但on()是更推荐的现代写法)
举个例子,如果插件里有这样的代码:
$(".list-item input").attr("value", defaultValue);
改成:
$(".list-item input").val(defaultValue);
验证效果
做完上面的修改后,再提交表单,就能正确获取所有输入框(包括动态添加的)的实时值了,不会再出现undefined的情况。
内容的提问来源于stack exchange,提问作者gerpaick
相关产品推荐
相关产品推荐

