jQuery多个DOM对象的单个事件
jQuery single event for several DOM objects
我正在尝试为DOM中的几个对象创建一个更改事件触发器。让我给你看看;我有这个代码
$(document).ready(function() {
$(".select_something").change(function() {
if (!($(".select_something option[value='0']").attr("selected"))) {
$(".write_something").css('display','');
}
else
{
$(".write_something").css('display','none');
}
});
});
有了这个,我有了几个选择器/下拉列表,所有这些都被称为.select_something
。当选项不是默认值(即0)时,它应该显示一个<textarea></textarea>
,所有这些都被称为.write_something
。
总而言之,这是一个非常简单的函数。
我遇到的问题是,这只影响第一对.select_something
、.write_something
,其余的都不受影响。
我试着和.find()
、.parent()
和.children()
混合,看看它是否能粘住,但没有。
如何在触发时更改所有.select_something
、.write_something
对?
编辑:ID当然应该是类
#select_something
是id。的id在整个页面上必须是唯一的。如果您有多个具有相同id的元素,那么这是根本错误的(并且会给您带来巨大的问题)。
话虽如此,修复方法很简单:将这些id更改为css类。
<select id="select_something">
成为
<select class="select_something">
然后,您可以根据css类进行选择,但当然,您必须选择相对于当前选择的:write_something
元素。根据你的结构,这样的东西可能会起作用:
$(".select_something").change(function() {
if (!($("option[value='0']", this).attr("selected"))) {
$(this).siblings(".write_something").css('display','');
}
else
{
$(this).siblings(".write_something").css('display','none');
}
});
您应该为多个对象使用公共类,而不是公共ID。
ID属性用于标识单个项目。CLASS属性用于定义一个项是一组项的一部分,所有项都具有相同的类名。
在所有这些类上使用类名selectObject
,然后。。
$(document).ready(function() {
$(".selectObject").change(function() {
//inside of an event, $(this) refers to the object that triggers the event,
//in this case, the item that was clicked.
if (!($(this).val()==0)) {
...
}
else
{
...
}
});
});
这里有一些例子。http://jsfiddle.net/FxLSR/1/
正如其他答案和评论中所提到的,只对唯一元素使用ID,对多个元素使用类。
这就是我设置代码的方式:
HTML:
<div>
<select class="select_something"> ... </select>
<textarea class="write_something"> ...</textarea>
</div>
<div>
<select class="select_something"> ... </select>
<textarea class="write_something"> ...</textarea>
</div>
etc...
Javascript:
$(document).ready(function() {
$(".select_something").change(function() {
if (!($(this).val() == "0") {
$(this).next().show();
}
else
{
$(this).next().hide();
}
});
});
如果元素不能像我给出的示例HTML代码中那样并排放置,那么只需确保使用某种相对选择器来选择文本区域,这样就不会选择所有的文本区域。例如,如果这两个是兄弟姐妹,但它们不相邻,则使用:$(this).兄弟姐妹(".write_something")
- 如何在没有jQuery的情况下模拟按名称命名的事件或解除单个事件的绑定
- 为什么我在单个事件上执行多个
- 将多个 Javascript 事件折叠为单个事件
- 绑定事件发射器上的单个事件
- 如何在 javascript 中对单个事件触发两个效果
- 取消委派单个事件
- jQuery多个DOM对象的单个事件
- 如何将多个方法绑定到单个事件
- 单个事件的多个JQuery效果
- 是否可以在FullCalendar中的[]事件中设置单个事件的颜色?
- 使用不显眼的javascript从单个事件调用多个函数
- 将单个事件附加到存储在数组中的多个元素,原生JS
- 如何在Javascript中为单个事件调用多个函数
- 围绕多个JS文件的代码包装单个事件?(铁路)
- 使用下划线_.debounce()触发单个事件
- 单个事件上的多个事件处理程序.Trigger或event.delegate
- 为页面中任何元素生成的自定义事件提供单个事件侦听器
- 在JavaScript中将一系列DOMNodeInserted事件作为单个事件进行处理
- jQuery:绑定一个可以处理其子级事件的单个事件侦听器
- 为什么我不能在 Backbone 的视图事件中的一个语句中将单个事件绑定到多个选择器