Hui, fast reply.....:-)
I did as you proposed and it works fine now. Special thanks for the explanation! On 28 Dez., 22:26, "Michael Geary" <m...@mg.to> wrote: > The problem is the first line in your clickOnTableRowResultSet() function: > > var row = jQuery(this); > > When you were using that function directly as a click handler, 'this' was > set to the element being clicked. But now you are calling the function > through an ordinary function call, so 'this' is not the same any more. (It's > now the global object, i.e. the window object.) > > To fix it: > > function addClickHandler(tableId, functionName, myUrl) { > jQuery('#' + tableId + ' ' + > 'tbody').children('tr').click(function() > { > functionName(this,myUrl); > }); > > } > > And: > > function clickOnTableRowResultSet(element,url) {...} > > -Mike > > > From: j0llyr0g3r > > > Hey guys, > > > i am having problems with some refactoring: > > > I have some html-tables to which i add an onclick-handler like this: > > > CODE: > > addClickHandler('myTableID',myFunction); > > > 'addClickHandler' looks like this: > > > CODE: > > function addClickHandler(tableId, functionName) { > > jQuery('#' + tableId + ' ' + > > 'tbody').children('tr').click (functionName); } > > > Now, all the functions i pass to this onclick-Handler look > > almost the same : > > > CODE: > > function clickOnTableRowResultSet() { > > var row = jQuery(this); > > var songUrl = trimAll(row.find('td:last form input > > [name=hidden_url_field]').val()); > > var trackID = trimAll(row.find('td:last form input > > [name=hidden_id_field]').val()); > > var trackInfoUrl = "/tracks/track_info/" + trackID; > > sendPlayEventToPlayer(songUrl); > > jQuery.ajax({success:function(request){$('#track_info').html > > (request);}, url:trackInfoUrl, async:false}); } CODE > > > with trimAll being: > > > CODE > > /* > > * trimAll replaces all whitespace and newlines from a string > > */ function trimAll(str) { > > return str.replace(/\n+|\s+/g,""); > > } > > > All of these functions basically do the same: they read out > > hidden fields in the last column of the table row, send an > > event to a flash- player and update a certain part of the website. > > > The only thing in which they differ, is this part: > > > var trackInfoUrl = "/tracks/track_info/" + trackID; > > > So i wanted to summarize all my almost identical functions > > into one by passing the above mentioned url to them. > > > I tried it like this: > > > Call to addClickHandler on the website: > > > CODE > > > addClickHandler('list_tracks_table',clickOnTableRowResultSet, > > '/ tracks/track_info/' ); > > > Then I changed my addClickHandler like this: > > > CODE > > function addClickHandler(tableId, functionName, myUrl) { > > jQuery('#' + tableId + ' ' + > > 'tbody').children('tr').click(function() > > { > > functionName(myUrl); > > }); > > } > > > And finally summarized my clickOnTable...-functions like this: > > > function clickOnTableRowResultSet(url) { > > var row = jQuery(this); > > var songUrl = trimAll(row.find('td:last form input > > [name=hidden_url_field]').val()); > > var trackID = trimAll(row.find('td:last form input > > [name=hidden_id_field]').val()); > > var trackInfoUrl = url + trackID; > > sendPlayEventToPlayer(songUrl); > > jQuery.ajax({success:function(request){$('#track_info').html > > (request);}, url:trackInfoUrl, async:false}); } > > > So far, this looks good to me, but unfortunately it doesn't work. > > Using debugging i see that 'clickOnTableRowResultSet' gets > > passed the correct url, but then the line afterwards: > > > CODE > > var songUrl = trimAll(row.find('td:last form input > > [name=hidden_url_field]').val()); > > > gives me the JS-error: > > Error: str is undefined > > > in function trimAll, which basically means that > > > row.find('td:last form input[name=hidden_url_field]').val() > > > yields undef. > > > This is what i don't get, i didn't change any part of the > > logic which deals with finding the fields, etc. > > > None of my changes affected these parts - at least in my > > eyes. But somehow the jquery-selectors seem to be unable to > > find my rows? > > > Does anybody see what's the problem here?