JQuery下一个类
JQuery next class
我需要启用禁用的下拉列表并从json更改值。当我的程序具有<select></select><select></select>
时我的意思是,连续选择可以很好地工作,但当两者之间有元素时就不行了。
索引页代码:
<ul>
<li>
<label>Item 1</label>
<select name="item1" id="item1" class="update">
<option value="">Select Item1</option>
<option value="1">1</option>
<option value="2">2</option>
</select>
</li>
<li>
<label>Item 2</label>
<select name="item2" id="item2" class="update" disabled="disabled">
<option value="">Select Item2</option>
/*output based on item1*/
</select>
</li>
<li>
<label>Item 3</label>
<select name="item3" id="item3" class="update" disabled="disabled">
<option value="">Select Item3</option>
/*output based on item2*/
</select>
</li>
在索引(以及jquery(中加载的脚本:
var formObject = {
run : function(obj) {
if (obj.val() === '') {
obj.nextAll('.update').html('<option value="">----</option>').attr('disabled', true);
} else {
var id = obj.attr('id');
var v = obj.val();
jQuery.getJSON('/test/mod/update.php', { id : id, value : v }, function(data) {
if (!data.error) {
obj.next('.update').html(data.list).removeAttr('disabled');
} else {
obj.nextAll('.update').html('<option value="">----</option>').attr('disabled', true);
}
});
}
}
};
$(function() {
$('.update').live('change', function() {
formObject.run($(this));
});
});
我知道我需要更换
obj.next('.update').html(data.list).removeAttr('disabled');
但我想不通。
这也适用于jquery 1.6.4,但不适用于1.9.1。我需要更改哪个部分来更新代码以与最新的jquery兼容?
不要使用.removeAttr('disabled')
,而是使用.prop('disabled', false)
。.prop
从1.6开始就被认为是更新元素属性的一种方法,但在1.7之后更受欢迎
你应该有这样的
更换obj.next('.update').html(data.list).removeAttr('disabled');
带有
obj.parent().next().children().removeAttr('disabled');
jsfiddle:http://jsfiddle.net/habo/7vMw8/
.live()
函数在jQuery 1.7中已弃用,在jQuery 1.9中已删除。
您可以使用.on()
代替:
$(document.body).on('change', '.update', function() {
formObject.run($(this));
});
当使用.on()
时,使用要调用处理程序的元素的最近祖先是最有效的。因此,您可以不使用document.body
,而使用<ul>
元素。不过,如果该元素具有"id"属性,则会更容易。
为了处理不是兄弟的<select>
元素,我建议改变以下情况:
obj.nextAll('.update').html(...
obj.next('.update').html(...
对此:
obj.closest('li').nextAll().find('.update').html(...
obj.closest('li').next().find('.update').html(...
当然,您也应该使用.prop()
来启用/禁用,正如@Explosion Pills所建议的那样。
相关文章:
- jQuery转盘下一个元素没有滑入
- 简单的垂直上一个和下一个按钮代码点击上下移动jQuery
- JavaScript/jQuery-添加添加和删除类与下一个函数之间的延迟
- 用键盘分页jQuery下一个和上一个控件.触发器('点击')不'不起作用
- jQuery/Javascript-是否可以获得链中的下一个调用
- jQuery UI 选项卡 - 将参数设置为下一个/上一个按钮单击
- 获取下一个或上一个隐藏元素的高度,以设置父元素的高度.jquery.
- jQuery - 根据标识符获取下一个选项的总值
- jQuery - 根据属性在所选选项之后的下拉列表中获取下一个选项的总值
- 遍历下一个和上一个 jQuery 选项卡
- JQuery,引导导航 - 如何添加上一个/下一个按钮
- jQuery网站的键盘快捷键,焦点使用左键和右键转到上一个或下一个元素
- 如何使用jQuery查找下一个文本区域
- JQuery insertAfter();移动下一个表格单元格
- jQuery-根据属性在下拉列表中获取所选选项之后的下一个选项的值
- 如何在没有外部插件的情况下在jQuery中制作一个滚动动画
- Jquery-更改下一个按钮的行为
- 使用Jquery查找下一个特定类,并检查它是否有其他类
- Jquery下一个和上一个按钮循环函数
- 使用JQuery将焦点更改为粘贴事件后的下一个输入