所以我在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();但是他们也没有帮助我。
答案 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/