Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 返回带有onclick属性的false_Javascript_Jquery_Attributes_Onclick - Fatal编程技术网

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之后运行,所以你的解决方案失败。这是一个非常好的答案和解决方案。我认为这是最好的解决办法一个很好的答案和解决办法。我认为这是最好的解决办法