In that situation, 'this' does not appear to be a reference to the
link we've clicked, and when I use firebug and do some console output,
this is what I get:

this.id = undef
/\d/.exec(this.id) is null

I had actually tried something along those lines before, changing my
click handler on the links I wanted added to the history to $
(selector).history.  I can't figure out what I need to query in order
to get at the clicked link's info.

On Oct 7, 9:37 am, Klaus Hartl <[EMAIL PROTECTED]> wrote:
> Nevertheless you are using the plugin in a way it isn't supposed to be
> used, this is what I wanted to point out and this is where the double
> loading comes from. One from the click handler itself and a second
> time because that click event is triggered again by the plugin.
> Besides if you're not using remote() or history() it will not work in
> IE (doesn't work in Safari 3 anyway as it stands).
>
> What is wrong with the following much less redundant code using the
> history() method:
>
> $('a.testing').history(function() {
>     var i = /\d/.exec(this.id)[0];
>     $.get('chapter-' + i + '.html', function(data) {
>         $('#div1').hide();
>         $('#div2').append(data).show();
>     });
>
> });
>
> --Klaus
>
> On 7 Okt., 14:26, Leanan <[EMAIL PROTECTED]> wrote:
>
> > Not having a test for Chap3 was a typo.  That last if should be
> > adjusted accordingly.
>
> > Klaus-
>
> > I don't want to use .remote, because I only want to make the ajax call
> > once.  If the content we expect to be there isn't there, then I want
> > to load it.  If, however, we've already loaded it, I just want to re-
> > show the div that contains it, not hit the server again (the data I'm
> > getting is large and takes some time to generate.  As the content is
> > not something likely to change in a few minutes, the solution I've
> > come up with is sufficient in that regard).  I already have this
> > functionality working flawlessly.  All I really need to do is that
> > when the back button is hit, div#2 gets hidden and div#1 is shown,
> > and, if someone hits forward from that point, then div#1 is hidden and
> > div#2 is shown.  This is working, too, except for what appears to be a
> > double call to $.get.
>
> > When I do something similar to the demo, the links with the #something
> > get added.  I don't want to log every single link that gets clicked
> > (they expand tables, adjust which divs get shown, etc).  This is why I
> > just have the call to initialize, to add the ability to swap the
> > visibility of the divs when they go back to the base url.
>
> > I don't understand though why it is appearing to call my $.get twice.
> > Is it because when the link with the # is clicked and put in the
> > history the plugin is executing the $.get as well?  This seems odd,
> > since I have neither any $.history or $.remote calls in my script.  I
> > would change my .click to a .history, except that I have a table of
> > links that could be selected, and I need to know which link was
> > clicked, because I need to grab info from the link for the resulting
> > call.
>
> > There must be a way to do this?
>
> > On Oct 7, 2:36 am, Klaus Hartl <[EMAIL PROTECTED]> wrote:
>
> > > History/Remote is not supposed to work that way. Although the hash is
> > > changing correctly it will not work in IE for example. You need to
> > > explicitly tell the history manager which links add to history. Just
> > > have a look at the demo. For pure Ajax loading links that is the
> > > remote method. In your case
>
> > > $('a.testing').remote('#div2', function() {
> > >     //callback
>
> > > });
>
> > > $.ajaxHistory.initialize();
>
> > > The show/hide of div1/div2 looks to me like a workaround you don't
> > > need but I'm not sure.
>
> > > --Klaus
>
> > > On 6 Okt., 22:52, Leanan <[EMAIL PROTECTED]> wrote:
>
> > > > Klaus,
>
> > > > I've created a demo that exhibits this behavior.  I modified your demo
> > > > that is included with the script 
> > > > athttp://www.stilbuero.de/jquery/history/
>
> > > > All you should have to do is change your index.html to be the
> > > > following:
>
> > > > <html lang="en">
> > > >   <head>
> > > >       <meta http-equiv="Content-Type" content="text/html;
> > > > charset=utf-8">
> > > >       <meta http-equiv="Content-Style-Type" content="text/css">
> > > >       <meta http-equiv="Content-Script-Type" content="text/
> > > > javascript">
> > > >       <title>jQuery history/remote - solution for hijaxing links</
> > > > title>
> > > >       <script src="jquery-1.1.3.1.pack.js" type="text/javascript"></
> > > > script>
> > > >       <script src="jquery.history_remote.js" type="text/javascript"></
> > > > script>
> > > >   </head>
> > > >   <body>
>
> > > >     <div id="div1">
> > > >       <a href="#test1" class="testing" id="Chap1">Test Chap1</a><br>
> > > >       <a href="#test2" class="testing" id="Chap2">Test Chap2</a><br>
> > > >       <a href="#test3" class="testing" id="Chap3">Test Chap3</a><br>
> > > >     </div>
>
> > > >     <div id="div2"> </div>
> > > >     <script type="text/javascript">
> > > >       $(document).ready(function() {
> > > >         $.ajaxHistory.initialize(function() {
> > > >           $('#div1').show();
> > > >           $('#div2').hide();
> > > >         });
>
> > > >         $('.testing').click(function() {
> > > >           if ($(this).attr('id') == "Chap1") {
> > > >             $.get('chapter-1.html', function(data) {
> > > >               $('#div2').append(data);
> > > >               $('#div1').hide();
> > > >               $('#div2').show();
> > > >             });
> > > >           }
> > > >           if ($(this).attr('id') == "Chap2") {
> > > >             $.get('chapter-2.html', function(data) {
> > > >               $('#div2').append(data);
> > > >               $('#div1').hide();
> > > >               $('#div2').show();
> > > >             });
> > > >           }
> > > >           if ($(this).attr('id') == "Chap1") {
> > > >             $.get('chapter-1.html', function(data) {
> > > >               $('#div2').append(data);
> > > >               $('#div1').hide();
> > > >               $('#div2').show();
> > > >             });
> > > >           }
> > > >         });
> > > >       });
> > > >     </script>
> > > >   </body>
> > > > </html>
>
> > > > You should notice that every time you click on the Test links, you
> > > > will actually get the html page twice instead of once.

Reply via email to