Couple of things:

1. "this" is automatically cast to which ever context you're using it in, in
your case, since you haven't escaped any quotations, when the inline script
is run, you're operating within the context of the anchor, <a>, element so
the anchor gets passed to the getShow() function, which explains why nothing
shows.

2. Even if you had properly escaped the single quotes and included the
correct "this" when building your anchors, you would have passed an object
reference. This reference would not be properly passed when the html string
is parsed and inserted into the document. Therefore, your method of manually
building anchors and setting their "onclick" events, all in html, will not
work.

The correct way to do this would be something like:

Javascript:
// All of your code and then...
// Notice that I removed the onclick attribute from the anchor tag
var divrow = '<div><h4>'+dayofweek+'</h4><p><a href="#"><img
src="/images/weekly_guide/'+image+'"class="today" width="105"
height="75"/></a></p></div>';

// Create variable xml to prevent "this" from being overwritten in separate
context
var xml = this;
$('.wkguidedays').append(divrow).find('a:last').click(function(xml){
 getShow(xml);

 // Prevent memory leaks
 xml = null;

 // Prevent propagation
 return false;
});

So, now that we are properly passing the 'xml' to getShow(), we have to
change a couple of things within that function as well. The most glaring
issue is the fact jQuery won't accept an object  as a selector, which is
what you're trying to do, so you need to instead submit two arguments, in
the following form:

$("selector string",context);

The following should work:

function getShow(xml) {
 $('date',xml).text();
 ...
}

Now, having said all of this, you may want to rethink how the whole project
is set up. It seems you're delivering a decent amount of information via
ajax, could you do this when the document loads and then hide it? For that
matter, using anchors with href="#" is not good because of event
propagation, you'll have to return false and it's semantically incorrect.
Why not bind click events to spans instead?

Hope this was helpful.

- jake



On 5/14/07, chillstroll <[EMAIL PROTECTED]> wrote:

Greeting all,
I'm sure this is quite simple; however not sure how do it. I want to
be able to get a specific xml node from the xml document using a
function call after I have initially retrieved it with jquery. Hope my
code will explain better:

XML DOC:
<?xml version="1.0" encoding="ISO-8859-1"?>
<schedule>
        <show>
                <date>Monday, May 14, 2007</date>
                <dayofweek>Monday</dayofweek>
                <image>051407.jpg</image>
                <title>San Antonio Hosts Training for Ministry
Conference</title>
                <description>Text Here</description>
                <filename>2007-5-14.asx</filename>
                <guests/>
                <specialoffer>Names of God bracelet</specialoffer>
                <specialofferproductid>431</specialofferproductid>
        </show>
        <show>
                <date>Tuesday, May 15, 2007</date>
                <dayofweek>Tuesday</dayofweek>
                <image>051507.jpg</image>
                <title>Training for Ministry Conference Impacts the Alamo
City</
title>
                <description>More Text Here</description>
                <filename>2007-5-15.asx</filename>
                <guests/>
                <specialoffer>Names of God bracelet</specialoffer>
                <specialofferproductid>431</specialofferproductid>
        </show>
</schedule>

JQUERY CODE:
<script type="text/javascript">
         $(function() {
                $.ajax({url: 'tiydschedule.xml',
                                type: 'GET',
                                dataType: 'xml',
                                timeout: 1000,
                                error: function(){
                                alert('Error loading XML document');
                        },
                        success: function(xml){
                               $('show',xml).each(function(id){
                                        var dayofweek =
$(this).find('dayofweek').text();
                        var image = $(this).find('image').text();
                        var divrow = '<div><h4>'+dayofweek+'</h4><p><a
href="#"
onclick="getShow(this);"><img src="/images/weekly_guide/'+image+'"
class="today" width="105" height="75"/></a></p></div>';
                        $('.wkguidedays').append(divrow);
                       });
                        }
                });
         });
         function getShow(xmlnode) {
                // do something with xmlnode
                var date = $(xmlnode).find('date').text();
        var dayofweek = $(xmlnode).find('dayofweek').text();
        var image = $(xmlnode).find('image').text();
        var title = $(xmlnode).find('title').text();
        var description = $(xmlnode).find('description').text();
        var filename = $(xmlnode).find('filename').text();
        var guests = $(xmlnode).find('guests').text();
        var specialoffer = $(xmlnode).find('specialoffer').text();
        var specialofferproductid = $
(xmlnode).find('specialofferproductid').text();
        alert(title);
         }
</script>

The first part works fine; however the call to the getShow(xmlnode)
function which I want to receive the passed xml node does not work.
I'm appending <a href="#" onclick="getShow(this);"> to the divrow
variable as I initially loop thru the xmlnodes. Nothing shows up on
the alert.

Is there a simpler way to do this? I am on the right track? Thanks for
the help.


Reply via email to