0

I have 2 buttons, A and B. On clicking A the hashtag changes and I want to call the window.onhashchange function. But, on clicking B, I am manually appending a hashtag to the URL. In the later case, I don't want window.onhashchange to be triggered.

Jason Aller
  • 3,391
  • 28
  • 37
  • 36
spyder
  • 310
  • 3
  • 6
  • 16
  • Can't you ignore the hashtag in function? Or remove hashchange handler before changing and append it back on done? – Vyktor Apr 15 '13 at 15:19
  • @Vyktor How can i remove hashchange handler before changing and append it back on done? – spyder Apr 15 '13 at 15:21
  • @Fred i hav tried a lotta things like using a counter. my page is loaded once and then i am manipulating it rest of the time. actually i want to capture the back and forward button click. and i am manually updating the hashtags. i dont want window.onhashchange to interfere in these occassions... – spyder Apr 15 '13 at 15:24

3 Answers3

0

Without any code all I can suggest is to check the id of the button that causes the event and act accordingly.

Useless Intern
  • 1,244
  • 1
  • 10
  • 20
0

With little help of this answer and this one you can temporary remove event handles. Here's working example of jsfiddle.net with click event so assuming jQuery >= 1.8 it'll be similar, thus something like this:

// 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]);
}

It worked for click so hopefully it'll work for hashchange.

Note: I know the code is not perfect, you should tuned it. Plus I have tested it only for click.

Community
  • 1
  • 1
Vyktor
  • 19,006
  • 5
  • 53
  • 93
0

From your question I'm assuming you have generated HTML by PHP something along this:

<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>

Having that you wish that A does something else than B. In your JavaScript you can use the hash function.

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

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

Hope that helps.

rkeet
  • 3,221
  • 2
  • 21
  • 43
  • -1, Based on [javascipt operator precedence](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence) is `!targetHash` evaluated before `==`, therefore you are doing `False == 'posB'` and why not to use `!=` directly? – Vyktor Apr 15 '13 at 18:53
  • Yea was my mistake, too much of a quick answer without proper testing, thanks for removing downvote. – rkeet Apr 15 '13 at 19:05
  • thanks a lot guys! i found the answer to this.. https://developers.google.com/tv/web/articles/location-hash-navigation#detect-loc-hash can help!!! – spyder Apr 16 '13 at 01:43