防止<a></a>中的href通过Javascript执行

时间:2017-07-14 22:03:58

标签: javascript html

所以我在HTML中有以下代码:

let spyPromise = sinon.stub().returns(Promise.resolve(['hasLength']))

function useSpyPromise (spyPromise) {
  let promiseOne = spyPromise
    .then(d => {
      if (d.length === 0) throw new Error('d 0')
      return d
    })

  let promiseTwo = spyPromise
    .then(d => {
      if (d.length === 1) throw new Error('d 1')
      return d
    })

  return {promiseOne, promiseTwo}  
}

用我的Javascript写的是:

<li class="" id="toolbar_section"><a id="toolbar_section_child" href="#foobar" onclick="return toolbarSetSection(this);" data-toggle="checkpoint">foobar</a></li>

然而,href仍然执行...我已经检查了许多类似的主题,其中包括event.preventDefault();但是他们也没有帮助我。

4 个答案:

答案 0 :(得分:1)

return false通常应该有效,但您的toolbarSetSection功能可能存在错误。

调用event.preventDefault()通常也应该有用。但是在您的情况下,您希望使用event作为第一个参数调用函数,而HTML代码使用链接对象作为第一个参数调用onclick="return toolbarSetSection(this);"。也许你想打电话给toolbarSetSection(event);

答案 1 :(得分:1)

在HTML中,您应该将onclick="return toolbarSetSection(this);"更改为onclick="toolbarSetSection(event);",然后在您的javascript函数中添加event.preventDefault();

您的完整代码将是:

<li class="" id="toolbar_section"><a id="toolbar_section_child" href="#foobar" onclick="toolbarSetSection(event);" data-toggle="checkpoint">foobar</a></li>

function toolbarSetSection(event) {
    event.preventDefault();
    return false;
};

答案 2 :(得分:0)

获得预期行为的更好方法,而无需在代码

上添加onclick
<script>
document.getElementById('toolbar_section_child').on('click', function(e){
    e.preventDefault();
})
</script>

假设id标记有唯一 a

修改 对于动态创建的元素,使用事件委托

document.addEventListener('click',function(e){
   /*
   if(e.target && e.target.id == 'toolbar_section_child'){
       e.preventDefault();
   }
   */
   // using a common class name
   if(e.target && e.target.className.split(" ").indexOf("toolbar_section_child") != -1){
       e.preventDefault();
   }
})

答案 3 :(得分:0)

HTML

<ul>
 <li class="" id="toolbar_section2"><a id="toolbar_section_child" href="#" onclick="toolbarSetSection()"  data-toggle="checkpoint">foobar</a></li>
</ul>

JS

function toolbarSetSection()
{
 alert('started');
 event.preventDefault();
 alert('weee');
}

jsfiddle所以你不能说它不起作用:):https://jsfiddle.net/rgoopw18/1/