从SELECT中删除只读属性
Remove Readonly attr from SELECT
我有一个点击事件,当用户点击具有readonly
状态的select
元素时触发。
我遇到的问题是,当readonly
状态从select
元素中移除时,点击事件仍然存在。
这里是一个DEMO
你会注意到,当你点击select
元素时,顶部函数仍然运行,即使select
不再是readonly
$('select[readonly]').on("click", function(e) {
e.preventDefault();
alert('This is readonly!');
});
$('button').on("click", function(e) {
e.preventDefault();
$('#div form select').attr("readonly", false);
alert('Readonly Attr Removed!');
});
有办法解决这个问题吗?我知道我可以通过某种方式添加/删除类来实现这一点,但我宁愿不使用这种方法。
您只需要使用事件委托.on()
,这样它就会考虑到按钮单击所做的DOM更改:
$('body').on("click",'select[readonly]', function(e) {
希望他能帮到你。
$('body').on("click",'select[readonly]', function(e) {
e.preventDefault();
alert('This is readonly!');
});
$('button').on("click", function(e) {
e.preventDefault();
$('#div form select').attr("readonly", false);
alert('Readonly Attr Removed!');
});
select[readonly] {
background-color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="div">
<form>
<div class="form-group">
<select readonly="true">
<option>Select an option</option>
<option>option 2</option>
<option>option 3</option>
</select>
</div>
</form>
</div>
<br /><br />
<button>
Remove Disabled Attr
</button>
我认为您需要删除onClick事件,因为它已经添加到列表中。不管你把Readonly属性改成什么,"onclick"事件还是会运行。
你可以检查这个jQuery方法http://api.jquery.com/off/来删除点击事件处理程序
由于readonly
是一个属性,您应该使用.prop(propertyName, value)
为匹配元素集设置一个或多个属性。
$('#div form select').prop("readonly", false);
您应该使用disabled
属性而不是readonly
,然后您不需要绑定/解绑定事件处理程序。
<select disabled>
</select>
小提琴
你有两个问题。
首先 select[readonly]
将针对具有readonly
属性的select,当它为false时也是如此。要解决这个问题,请使用removeAttr('readonly')
.
第二
选择已经绑定了点击事件。因此,使用过滤器将函数绑定到表单上。
一起:
$('form').on("click", 'select[readonly]', function(e) {
e.preventDefault();
alert('This is readonly!');
});
$('button').on("click", function(e) {
e.preventDefault();
$('#div form select').removeAttr("readonly");
alert('Readonly Attr Removed!');
});
select[readonly] {
background-color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="div">
<form>
<div class="form-group">
<select readonly>
<option>Select an option</option>
<option>option 2</option>
<option>option 3</option>
</select>
</div>
</form>
</div>
<br /><br />
<button>
Remove Disabled Attr
</button>
或者更新后的Fiddle
一个更好的解决方案是使用一个类,readonly属性不会阻止点击事件:
$('body').on("click",'select:not(.active)', function(e) {
e.preventDefault();
alert('This is readonly!');
});
$('button').on("click", function(e) {
e.preventDefault();
$('#div form select').addClass("active");
$('#div form select').removeAttr('readonly');
alert('Readonly Attr Removed!');
});
$('body').on("click",'select:not(.active)', function(e) {
e.preventDefault();
alert('This is readonly!');
});
$('button').on("click", function(e) {
e.preventDefault();
$('#div form select').addClass("active");
$('#div form select').removeAttr('readonly');
alert('Readonly Attr Removed!');
});
select[readonly] {
background-color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="div">
<form>
<div class="form-group">
<select readonly="true">
<option>Select an option</option>
<option>option 2</option>
<option>option 3</option>
</select>
</div>
</form>
</div>
<br /><br />
<button>
Remove Disabled Attr
</button>
相关文章:
- 为什么 Jasmine 在我设置 selectedIndex 时抱怨“试图分配给只读属性”
- 尝试分配只读属性,即使相同的命令在其他地方也有效
- AngularJS-深层对象'属性删除
- 因果报应:试图分配给只读属性
- 在[background:url({{XXX}})无重复中心的严格模式下,不允许分配只读属性
- 补间最大动画 无法分配给只读属性“_gsTweenID”
- 无法读取空放置区的属性“删除子项”
- AngularJS $http.delete 在“类型错误:无法分配给只读属性'方法'”中中断
- 如何使用jquery按数据属性删除li标签
- 文本框在回发时变为只读,即使手动将只读属性设置为 false
- Ionic2 + Angular2 - 尝试分配给只读属性
- 设置只读属性以保持输入可编辑
- 如何在javascript中设置文本框的只读属性
- 未捕获的类型错误: 无法分配给只读属性
- JavaScript 属性删除如果为假,则不删除,如果为真循环
- 类型错误: 无法分配给只读属性“选中”复选框
- 不能分配给只读属性“_id”
- 以编程方式设置 jqGrid 列中编辑选项的“只读”属性
- 从SELECT中删除只读属性
- 删除Selenium WebDriver中的只读属性