Javascript 返回带有onclick属性的false
我有以下代码:Javascript 返回带有onclick属性的false,javascript,jquery,attributes,onclick,Javascript,Jquery,Attributes,Onclick,我有以下代码: <ul> <li class="foo" onclick="alert('Hello')">a</li> <li class="foo" onclick="alert('Hello')">b</li> <li class="foo" onclick="alert('Hello')">c</li> </ul> $(document).on('click',
<ul>
<li class="foo" onclick="alert('Hello')">a</li>
<li class="foo" onclick="alert('Hello')">b</li>
<li class="foo" onclick="alert('Hello')">c</li>
</ul>
$(document).on('click','.foo', function(){
if ($(this).text()=='a')
return false;
});
但这不起作用:
是否有只修改javascript的解决方案
更新:我不想删除属性
onclick
,因为li
的值可以更改除了唯一的id警告之外,只需删除onclick
attr:
标记:
<ul>
<li class="foo" onclick="alert('Hello')">a</li>
<li class="foo" onclick="alert('Hello')">b</li>
<li class="foo" onclick="alert('Hello')">c</li>
</ul>
$('.foo').map(function(){
if($(this).text() == 'a')
$(this).removeAttr('onclick')
});
除了唯一的id警告之外,只需删除
onclick
attr:
标记:
<ul>
<li class="foo" onclick="alert('Hello')">a</li>
<li class="foo" onclick="alert('Hello')">b</li>
<li class="foo" onclick="alert('Hello')">c</li>
</ul>
$('.foo').map(function(){
if($(this).text() == 'a')
$(this).removeAttr('onclick')
});
这里的问题是jQuery代码在onclick属性之后运行。因此,没有办法让它以您当前的设置方式工作。解决方案是查找onclick元素并将其移动到另一个事件,并让您动态添加的onclick触发事件
$(".foo").each( function() {
this._onclick = this.onclick;
this.onclick = null;
});
$(document).on('click','.foo', function(){
if ($(this).text()!=='a') {
this._onclick.apply(this,arguments);
}
});
此方法的问题是,如果动态添加内容,则必须调用转换单击的代码。这里的问题是jQuery代码在onclick属性之后运行。因此,没有办法让它以您当前的设置方式工作。解决方案是查找onclick元素并将其移动到另一个事件,并让您动态添加的onclick触发事件
$(".foo").each( function() {
this._onclick = this.onclick;
this.onclick = null;
});
$(document).on('click','.foo', function(){
if ($(this).text()!=='a') {
this._onclick.apply(this,arguments);
}
});
此方法的问题是,如果动态添加内容,则必须调用转换单击的代码。您可以为复制的元素设置一个
类,并使用以下代码段:
<ul>
<li class="foo">a</li>
<li class="foo">b</li>
<li class="foo">c</li>
</ul>
<script>
$('.foo').on('click',function(){
if($(this).text() === 'a'){
return false;
}
// Whatever you want here.
});
</script>
- a
- b
- c
$('.foo')。在('click',function()上{
如果($(this).text()=='a'){
返回false;
}
//你想要什么都行。
});
您可以为复制的元素设置一个类,并使用以下代码段:
<ul>
<li class="foo">a</li>
<li class="foo">b</li>
<li class="foo">c</li>
</ul>
<script>
$('.foo').on('click',function(){
if($(this).text() === 'a'){
return false;
}
// Whatever you want here.
});
</script>
- a
- b
- c
$('.foo')。在('click',function()上{
如果($(this).text()=='a'){
返回false;
}
//你想要什么都行。
});
不能有多个ID相同的元素,请使用一个类。onclick
属性代码在jQuery单击处理程序之前运行。你不能停止已经发生的事情。我不想删除onclick属性,因为
的值可以更改。顺便说一句,我用class而不是id更新了答案@MichaelAguilar,然后不使用onclick
属性-将与元素关联的数据存储在data-*
属性中。例如a
。然后可以使用$(element).attr(“数据某物”)
或$(element).data(“某物”)
获取存储值。不要尝试混合使用基本事件处理和jQuery事件处理不能有多个具有相同ID的元素,请使用一个类。onclick
属性代码在jQuery单击处理程序之前运行。你不能停止已经发生的事情。我不想删除onclick属性,因为
的值可以更改。顺便说一句,我用class而不是id更新了答案@MichaelAguilar,然后不使用onclick
属性-将与元素关联的数据存储在data-*
属性中。例如a
。然后可以使用$(element).attr(“数据某物”)
或$(element).data(“某物”)
获取存储值。不要尝试混合使用basic和jQuery事件处理,但OP希望它启动!但是OP说,我想阻止默认的action alert()
@epascarello现在我删除它只是为了想要的元素。如果用户希望保留原始事件的副本,他可能会喜欢您提出的解决方案。但OP希望它启动!但是OP说,我想阻止默认的action alert()
@epascarello现在我删除它只是为了想要的元素。如果用户希望保留原始事件的副本,他可能会喜欢你提出的解决方案。你删除了它上面的onclick事件,jQuery在元素上的onclick之后运行,所以你的解决方案失败。你删除了它上面的onclick事件,jQuery在元素上的onclick之后运行,所以你的解决方案失败。这是一个非常好的答案和解决方案。我认为这是最好的解决办法一个很好的答案和解决办法。我认为这是最好的解决办法