如何在某些点击时不触发window.onhashchange?

时间:2013-04-15 15:16:53

标签: javascript jquery

我有2个按钮,A和B.点击A时,标签会发生变化,我想调用window.onhashchange功能。但是,在单击B时,我手动将标签附加到URL。在后一种情况下,我不希望触发window.onhashchange

3 个答案:

答案 0 :(得分:0)

没有任何代码我可以建议检查导致事件的按钮的ID并相应地采取行动。

答案 1 :(得分:0)

this answerthis one的帮助下,您可以临时删除事件句柄。这是working example of jsfiddle.net click事件,因此假设jQuery >= 1.8它会相似,因此类似这样:

// Initialization, add some events
$.hashchange(...);

// Store event handles for hashchange
hashchange_handles = [];
$.each( $._data($('#foo').get(0), "events")['hashchange'], function(i,handle){
    // alert(handle.handler);
    hashchange_handles.push(handle.handler);
});

// Remove handles
$.off('hashchange');

// Do your stuff here

// Restore event handler
length = hashchange_handles.length;
for(var i=0; i<length; i++) {
    $.hashchange( hashchange_handles[i]);
}

适用于click,所以希望它适用于hashchange

注意:我知道代码不完美,你应该调整它。另外,我仅针对click进行了测试。

答案 2 :(得分:0)

从你的问题我假设你已经用PHP生成了HTML:

<ul id='list-of-links'>
    <li id='A'><a href="#posA">Link A</a></li>
    <li id='B'><a href="#posB">Link B</a></li>
</ul>

如果您希望A做除B以外的其他操作。在JavaScript中,您可以使用散列函数。

var targetHash = window.location.hash.slice(1);

if( targetHash != 'posB' ) {
    //do something as it's not 'posB'
};

希望有所帮助。