我在使用jQuery时遇到了一些麻烦。
我正在创建一个简单的CMS,并且在界面中我有一个页面列表,每个列表项中都有一个编辑链接。我让jQuery用该编辑ID监听点击。然后它将查看父LI以查看它具有的id,以便用户可以将更改保存到数据库中的右侧pageId。
我的清单
<ul id="sortable" class="ui-sortable">
<li class="sortable" id="listItem_1">
<a href="#" id="edit">edit</a>
<span id="title">List item 1</span>
</li>
<li class="sortable" id="listItem_2">
<a href="#" id="edit">edit</a>
<span id="title">List item 2</span>
</li>
etc..
</ul>
和javascript
<script type="text/javascript">
$(document).ready(function() {
$('a#edit').click(function(){
alert($(this).parent("li").attr("id"));
})
});
但只有第一个编辑链接有效。所有其他人都被忽略了。 您可以在此处查看问题,http://info.radio-onair.ath.cx/active/scms/admin/pages/test.html
提前致谢。
答案 0 :(得分:26)
在HTML中,id
指的是唯一标识符。换句话说,具有相同id
的2个元素是违反标准的。这里的jQuery行为正确。
使用class
代替id
来识别您的代码:
<强> HTML:强>
<ul id="sortable" class="ui-sortable">
<li class="sortable" id="listItem_1">
<a class="edit" href="#">edit</a>
<span id="title">List item 1</span>
</li>
<li class="sortable" id="listItem_2">
<a class="edit" href="#">edit</a>
<span id="title">List item 2</span>
</li>
etc..
</ul>
<强> JavaScript的:强>
$(document).ready(function() {
$('a.edit').click(function(){
alert($(this).parent("li").attr("id"));
})
});
或者,由于父标记似乎已经具有唯一的类,因此您可以简单地使用它来定位所需的标记。这将减少我称之为“类噪声”(将无用类定义为可以由其父级的唯一属性作为目标的目标元素)。
<强> HTML:强>
<ul id="sortable" class="ui-sortable">
<li class="sortable" id="listItem_1">
<a href="#">edit</a>
<span id="title">List item 1</span>
</li>
<li class="sortable" id="listItem_2">
<a href="#">edit</a>
<span id="title">List item 2</span>
</li>
etc..
</ul>
<强> JavaScript的:强>
$(document).ready(function() {
$("li.sortable a:contains('edit')").click(function(){
alert($(this).parent("li").attr("id"));
})
});
答案 1 :(得分:6)
我认为这是因为每个元素使用相同的 id 。请尝试使用课程。
<a href="#" class="edit">edit</a>
然后
$('a.edit').click(...)
答案 2 :(得分:4)
您不能拥有两个具有相同ID的元素。这是无效的HTML。也许你想要一个班级?
尝试:
<ul id="sortable" class="ui-sortable">
<li class="sortable" id="listItem_1">
<a href="#" class="edit">edit</a>
<span id="title">List item 1</span>
</li>
<li class="sortable" id="listItem_2">
<a href="#" class="edit">edit</a>
<span id="title">List item 2</span>
</li>
etc..
</ul>
<script type="text/javascript">
$(document).ready(function() {
$('a.edit').click(function(){
alert($(this).parent("li").attr("id"));
})
});
</script>
答案 3 :(得分:3)
ID必须是唯一的,而类名可以是相同的。
答案 4 :(得分:1)
我尝试了你的链接,看起来所有的警报都已连线并正常工作,只是没有按顺序排列(2是5等)
答案 5 :(得分:1)
如果您不想更改HTML(但您应该),可以试试这个:
$(document).ready(function() {
$('a:contains("edit")').click(function(){
alert($(this).parent("li").attr("id"));
})
});
答案 6 :(得分:0)
我不知道其他人说了什么,但我刚刚改变了
<a id="anyidname"..
从花哨的盒子......到我的html / php页面末尾的这个脚本......以及标签
<a rel="anyclassname"..
<script type="text/javascript">
$(document).ready(function(){
$('a[rel="anyclassname"]').fancybox({
'width' : '75%',
'height' : '75%',
'autoScale' : false,
'transitionIn' : 'none',
'transitionOut' : 'none',
'type' : 'iframe'
});
});
</script>"