Re: [jQuery] Re: Very Strange !!! The same HTML code works well, but append() it not !!!

2009-12-08 Thread Michael Geary
Eric, you really need to put up a test page so we can try actually loading
it. Otherwise it's too hard to tell what might be wrong. I'm not even sure
what the problem is we're supposed to be looking at!

-Mike

On Mon, Dec 7, 2009 at 11:44 PM, Eric Zhong ericiszhongwen...@gmail.comwrote:

 i have modified the code , but the result is the same, even if i write this
 in one line !!! Help !!!

 one line version:
 


 html
 head
 script src=
 http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js;/script
 SCRIPT LANGUAGE=JavaScript
 !--
 $(function(){
 // /*
 var html_video ='table id=tb_all width=724pxtrtd
 valign=toptable id=tb_video class=tb_widthtr
 class=tb_headtdnbsp/tdtdfilename/tdtdlen(s)/tdtdsize(KB)/td/tr/table/td/tr/table';

 $(body).append( html_video );

 var data =
 [
 {name: 1, len: 432, size: 321},
 {name: 2, len: 54543, size: 432},
 {name: 3, len: 3243, size: 432},
 {name: 4, len: 543, size: 432},
 {name: 5, len: 543, size: 654},
 {name: 6, len: 654, size: 654},
 {name: 7, len: 765, size: 654},
 {name: 8, len: 765, size: 765},
 {name: 9, len: 53, size: 654}
 ];

 var a = data;
 if ( a != null ){
 for(var i=0; ia.length; i++){
 var d = a[i];
 $(#tb_video).append('trtdinput type=checkbox
 //tdtd' + d.name + '/tdtd' + d.len + '/tdtd' + d.size +
 '/tdtr');
 }
 }

 $(#tb_video).closest(tr).append('td width=80px
 align=center style=vertical-align:topinput id=pl_bt_up type=button
 value=↑ /input id=pl_bt_down type=button value=↓ //td');
 // */
 $(#pl_bt_up).click(function() {
 var $all = $(#tb_video tr);
 var $trs = $(#tb_video tr:has(input:checked));
 if( $all.index($trs.get(0)) != 1 ){
 $trs.each(function(){
 $(this).prev().before($(this));
 });
 }
 });

 $(#pl_bt_down).click(function() {
 var $all = $(#tb_video tr);
 var $trs = $(#tb_video tr:has(input:checked));

 if( $all.index( $trs.get($trs.length-1) ) != $all.length-1
 ){
 for( i = $trs.length-1; i=0; i-- ) {
 var $item = $( $trs.get(i) );
 $item.insertAfter($item.next());
 }
 }
 });
 });
 --
 /SCRIPT
 /head
 body
 !--
 table id=tb_all width=724px
 tr
 td valign=top
 table id=tb_video class=tb_width
 tr class=tb_head
 tdnbsp/td
 tdfilename/td
 tdlen(s)/td
 tdsize(KB)/td
 /tr
 trtdinput type=checkbox
 //tdtd1/tdtd222/tdtd432/td/tr
 trtdinput type=checkbox
 //tdtd2/tdtd333/tdtd543/td/tr
 trtdinput type=checkbox
 //tdtd3/tdtd444/tdtd654/td/tr
 trtdinput type=checkbox
 //tdtd4/tdtd555/tdtd765/td/tr
 trtdinput type=checkbox
 //tdtd5/tdtd666/tdtd876/td/tr
 trtdinput type=checkbox
 //tdtd6/tdtd777/tdtd432/td/tr
 trtdinput type=checkbox
 //tdtd7/tdtd888/tdtd543/td/tr
 trtdinput type=checkbox
 //tdtd8/tdtd999/tdtd265/td/tr
 /table
 /td
 td width=80px align=center style=vertical-align:top
 input id=pl_bt_up type=button value=↑ /
 input id=pl_bt_down type=button value=↓ /
 /td
 /tr
 /table
 --
 /body
 /html

 



 2009/12/8 seasoup seas...@gmail.com

 javascript cant read strings over line breaks.

   $(#tb_video).append(' \
  tr \
  tdinput
  type=checkbox //td \
  td' + d.name + '/td \
  td' + d.len + '/td \
  td' + d.size + '/td \
  tr ');

 must be

   $(#tb_video).append('tr'+
  'tdinput type=checkbox
 //td'+
  'td' + d.name + '/td'+
  'td' + d.len + '/td'+
  'td' + d.size + '/td'+
  'tr ');

 On Dec 7, 6:30 pm, Eric Zhong 

Re: [jQuery] Re: Very Strange !!! The same HTML code works well, but append() it not !!!

2009-12-08 Thread Michael Geary
Hi Eric,

Please forgive me for not explaining clearly.

Here is what I meant by a test page: post your HTML page on a website
somewhere and give us the URL to that page. Then we can click the link and
load your page, just like any other web page. That makes it much easier to
help you troubleshoot.

Here, since I didn't explain myself well, I went ahead and uploaded your
files to my own site:

http://mg.to/test/zhong/OK.html

http://mg.to/test/zhong/Error.html

Now when I load the page I can see the strange behavior you noticed.

I also noticed that the two pages display slightly differently from each
other. Do you see how the Error page has more spacing between the rows than
the OK page? This made me think there is something different in the
dynamically generated code.

To find the difference, I used the View Source Chart extension for Firefox:

https://addons.mozilla.org/en-US/firefox/addon/655

along with the Araxis Merge file comparison program:

http://www.araxis.com/

I opened your OK.html file in Firefox and selected View Source Chart from
the View menu.

I also opened a new file comparison window in Araxis Merge. (Araxis Merge is
an excellent but fairly expensive commercial product. You could use any file
comparison or diff program, though.)

Then I did a select all and copy, and pasted the result into the left
panel in Araxis Merge.

I did the same thing with your Error.html file and pasted the result into
the right panel in Araxis Merge.

This showed me the difference between the straight HTML version and the
JavaScript-generated version.

I saved the comparison report here for you to look at:

http://mg.to/test/zhong/compare.html

Scroll down in that page and take a look around line 116 on the left, line
256 on the right. Do you see the extra /tr and tr tags there, and the
same thing in the lines below that?

In the JavaScript-generated version, there is an *extra* empty table row in
between each of your table rows.

This is why your up and down buttons are acting strangely. They probably
*are* moving the table row(s) up and down as expected, but those empty table
rows are interfering with that. I'm sure if you get rid of the empty rows it
will work as you want.

This also explains why there is a small difference in layout between the two
versions. Do you see where the JavaScript version has more spacing between
the rows (at least in Firefox)? That is caused by the empty rows.

I'll let you sort out what part of your JavaScript code is causing those
extra rows to be added.

Hope that helps,

-Mike

On Tue, Dec 8, 2009 at 1:59 AM, Eric Zhong ericiszhongwen...@gmail.comwrote:

 thanks for your reply, my english is poor , i can't understand what is
 test page,  you meant  src file or description for the result ???


 description:
 1. when you use HTML code,  it runs well , you can select one or more
 select box and click up or down button, the selected line will up and down
 immediately.
 2. but when you use jQuery  to append() the code , you do the same action ,
 the selected line, will move or not some times, and when you multiselect
 lines, you will see the strange result, it's hard to say with my poor
 english, sorry !!!

 i attach 2 files, one is OK, and another is Error. you can run it (double
 click) , and to opt and to see what difference.


 2009/12/8 Michael Geary m...@mg.to

 Eric, you really need to put up a test page so we can try actually loading
 it. Otherwise it's too hard to tell what might be wrong. I'm not even sure
 what the problem is we're supposed to be looking at!

 -Mike


 On Mon, Dec 7, 2009 at 11:44 PM, Eric Zhong 
 ericiszhongwen...@gmail.comwrote:

 i have modified the code , but the result is the same, even if i write
 this in one line !!! Help !!!

 one line version:
 


 html
 head
 script src=
 http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js;/script
 SCRIPT LANGUAGE=JavaScript
 !--
 $(function(){
 // /*
 var html_video ='table id=tb_all width=724pxtrtd
 valign=toptable id=tb_video class=tb_widthtr
 class=tb_headtdnbsp/tdtdfilename/tdtdlen(s)/tdtdsize(KB)/td/tr/table/td/tr/table';

 $(body).append( html_video );

 var data =
 [
 {name: 1, len: 432, size: 321},
 {name: 2, len: 54543, size: 432},
 {name: 3, len: 3243, size: 432},
 {name: 4, len: 543, size: 432},
 {name: 5, len: 543, size: 654},
 {name: 6, len: 654, size: 654},
 {name: 7, len: 765, size: 654},
 {name: 8, len: 765, size: 765},
 {name: 9, len: 53, size: 654}
 ];

 var a = data;
 if ( a != null ){
 for(var i=0; ia.length; i++){
 var d = a[i];
 $(#tb_video).append('trtdinput type=checkbox
 //tdtd' + d.name + '/tdtd' + d.len + 

Re: [jQuery] Re: Very Strange !!! The same HTML code works well, but append() it not !!!

2009-12-08 Thread Eric Zhong
Michael, thank you very much


I find the bug, the last tr should be /tr.

$(#tb_video).append('tr
tdinput type=checkbox //tdtd' + d.name + '/tdtd' + d.len +
'/tdtd' + d.size + '/tdtr');

this bug trouble me more than 2 days, thank you again, you not only give a
good tools which aid me to find the bug, also you show me a way  to find bug
!

I kill another bug use  View Source Chart less than 2 minute which trouble
me in a long time too.

Thank You !!!


2009/12/9 Michael Geary m...@mg.to

 Hi Eric,

 Please forgive me for not explaining clearly.

 Here is what I meant by a test page: post your HTML page on a website
 somewhere and give us the URL to that page. Then we can click the link and
 load your page, just like any other web page. That makes it much easier to
 help you troubleshoot.

 Here, since I didn't explain myself well, I went ahead and uploaded your
 files to my own site:

 http://mg.to/test/zhong/OK.html

 http://mg.to/test/zhong/Error.html

 Now when I load the page I can see the strange behavior you noticed.

 I also noticed that the two pages display slightly differently from each
 other. Do you see how the Error page has more spacing between the rows than
 the OK page? This made me think there is something different in the
 dynamically generated code.

 To find the difference, I used the View Source Chart extension for Firefox:

 https://addons.mozilla.org/en-US/firefox/addon/655

 along with the Araxis Merge file comparison program:

 http://www.araxis.com/

 I opened your OK.html file in Firefox and selected View Source Chart from
 the View menu.

 I also opened a new file comparison window in Araxis Merge. (Araxis Merge
 is an excellent but fairly expensive commercial product. You could use any
 file comparison or diff program, though.)

 Then I did a select all and copy, and pasted the result into the left
 panel in Araxis Merge.

 I did the same thing with your Error.html file and pasted the result into
 the right panel in Araxis Merge.

 This showed me the difference between the straight HTML version and the
 JavaScript-generated version.

 I saved the comparison report here for you to look at:

 http://mg.to/test/zhong/compare.html

 Scroll down in that page and take a look around line 116 on the left, line
 256 on the right. Do you see the extra /tr and tr tags there, and the
 same thing in the lines below that?

 In the JavaScript-generated version, there is an *extra* empty table row in
 between each of your table rows.

 This is why your up and down buttons are acting strangely. They probably
 *are* moving the table row(s) up and down as expected, but those empty table
 rows are interfering with that. I'm sure if you get rid of the empty rows it
 will work as you want.

 This also explains why there is a small difference in layout between the
 two versions. Do you see where the JavaScript version has more spacing
 between the rows (at least in Firefox)? That is caused by the empty rows.

 I'll let you sort out what part of your JavaScript code is causing those
 extra rows to be added.

 Hope that helps,

 -Mike


 On Tue, Dec 8, 2009 at 1:59 AM, Eric Zhong ericiszhongwen...@gmail.comwrote:

 thanks for your reply, my english is poor , i can't understand what is
 test page,  you meant  src file or description for the result ???


 description:
 1. when you use HTML code,  it runs well , you can select one or more
 select box and click up or down button, the selected line will up and down
 immediately.
 2. but when you use jQuery  to append() the code , you do the same action
 , the selected line, will move or not some times, and when you multiselect
 lines, you will see the strange result, it's hard to say with my poor
 english, sorry !!!

 i attach 2 files, one is OK, and another is Error. you can run it (double
 click) , and to opt and to see what difference.


 2009/12/8 Michael Geary m...@mg.to

 Eric, you really need to put up a test page so we can try actually loading
 it. Otherwise it's too hard to tell what might be wrong. I'm not even sure
 what the problem is we're supposed to be looking at!

 -Mike


 On Mon, Dec 7, 2009 at 11:44 PM, Eric Zhong ericiszhongwen...@gmail.com
  wrote:

 i have modified the code , but the result is the same, even if i write
 this in one line !!! Help !!!

 one line version:
 


 html
 head
 script src=
 http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js;/script
 SCRIPT LANGUAGE=JavaScript
 !--
 $(function(){
 // /*
 var html_video ='table id=tb_all width=724pxtrtd
 valign=toptable id=tb_video class=tb_widthtr
 class=tb_headtdnbsp/tdtdfilename/tdtdlen(s)/tdtdsize(KB)/td/tr/table/td/tr/table';

 $(body).append( html_video );

 var data =
 [
 

[jQuery] Re: Very Strange !!! The same HTML code works well, but append() it not !!!

2009-12-07 Thread seasoup
javascript cant read strings over line breaks.

   $(#tb_video).append(' \
 tr \
 tdinput
 type=checkbox //td \
 td' + d.name + '/td \
 td' + d.len + '/td \
 td' + d.size + '/td \
 tr ');

must be

   $(#tb_video).append('tr'+
 'tdinput type=checkbox 
 //td'+
 'td' + d.name + '/td'+
 'td' + d.len + '/td'+
 'td' + d.size + '/td'+
 'tr ');

On Dec 7, 6:30 pm, Eric Zhong ericiszhongwen...@gmail.com wrote:
 html
 head
     script src=http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/
 jquery.js/script
     SCRIPT LANGUAGE=JavaScript
     !--
         $(function(){
 // /*
                         var html_video = ' \
                             table id=tb_all width=724px \
                                 tr \
                                     td valign=top \
                                         table id=tb_video
 class=tb_width \
                                             tr class=tb_head \
                                                 tdnbsp/td \
                                                 tdfilename/td \
                                                 tdlen(s)/td \
                                                 tdsize(KB)/td \
                                             /tr \
                                         /table \
                                     /td \
                                                                 /tr \
                             /table'

                         $(body).append( html_video );

                         var data =
                         [
                                 {name: 1, len: 432, size: 321},
                                 {name: 2, len: 54543, size: 432},
                                 {name: 3, len: 3243, size: 432},
                                 {name: 4, len: 543, size: 432},
                                 {name: 5, len: 543, size: 654},
                                 {name: 6, len: 654, size: 654},
                                 {name: 7, len: 765, size: 654},
                                 {name: 8, len: 765, size: 765},
                                 {name: 9, len: 53, size: 654}
                         ];

             var a = data;
             if ( a != null ){
                 for(var i=0; ia.length; i++){
                                         var d = a[i];
                     $(#tb_video).append(' \
                                         tr \
                                             tdinput
 type=checkbox //td \
                                             td' + d.name + '/td \
                                             td' + d.len + '/td \
                                             td' + d.size + '/td \
                                         tr ');
                 }
             }

                         $(#tb_video).closest(tr).append(' \
                                     td width=80px align=center
 style=vertical-align:top \
                                                                               
   input id=pl_bt_up type=button value=↑ / \
                                                                               
   input id=pl_bt_down type=button value=↓ /
 \
                                     /td ');
 // */
                 $(#pl_bt_up).click(function() {
                         var $all = $(#tb_video tr);
                 var $trs = $(#tb_video tr:has(input:checked));
                 if( $all.index($trs.get(0)) != 1 ){
                     $trs.each(function(){
                             $(this).prev().before($(this));
                     });
                 }
                 });

                 $(#pl_bt_down).click(function() {
                 var $all = $(#tb_video tr);
                 var $trs = $(#tb_video tr:has(input:checked));

                 if( $all.index( $trs.get($trs.length-1) ) !=
 $all.length-1 ){
                     for( i = $trs.length-1; i=0; i-- ) {
                         var $item = $( $trs.get(i) );
                         $item.insertAfter($item.next());
                     }
                 }
             });
         });
     --

     /SCRIPT
 /head
 body
 !--
     table id=tb_all width=724px
         tr
                         td valign=top
                                 table id=tb_video class=tb_width
                     tr class=tb_head
                         tdnbsp/td
                         tdfilename/td
                         tdlen(s)/td
                         tdsize(KB)/td
                     /tr
                     trtdinput 

Re: [jQuery] Re: Very Strange !!! The same HTML code works well, but append() it not !!!

2009-12-07 Thread Michael Geary
Don't be so sure about that. I thought the same thing you did, but we were
both wrong: you *can* write multline strings in JavaScript.
Backslash-newline works inside a string just like it does outside one in
normal JS code.

You do have to be careful; there can't be any whitespace after the
backslash. That would give you an unterminated string literal error.

That said, I have no idea what the actual problem is. I would take a look at
it if there were a test page I could load (hint to Eric!).

-Mike

On Mon, Dec 7, 2009 at 11:19 PM, seasoup seas...@gmail.com wrote:

 javascript cant read strings over line breaks.

   $(#tb_video).append(' \
  tr \
  tdinput
  type=checkbox //td \
  td' + d.name + '/td \
  td' + d.len + '/td \
  td' + d.size + '/td \
  tr ');

 must be

   $(#tb_video).append('tr'+
  'tdinput type=checkbox
 //td'+
  'td' + d.name + '/td'+
  'td' + d.len + '/td'+
  'td' + d.size + '/td'+
  'tr ');

 On Dec 7, 6:30 pm, Eric Zhong ericiszhongwen...@gmail.com wrote:
  html
  head
  script src=http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/
  jquery.js/script
  SCRIPT LANGUAGE=JavaScript
  !--
  $(function(){
  // /*
  var html_video = ' \
  table id=tb_all width=724px \
  tr \
  td valign=top \
  table id=tb_video
  class=tb_width \
  tr class=tb_head \
  tdnbsp/td \
  tdfilename/td \
  tdlen(s)/td \
  tdsize(KB)/td \
  /tr \
  /table \
  /td \
  /tr \
  /table'
 
  $(body).append( html_video );
 
  var data =
  [
  {name: 1, len: 432, size: 321},
  {name: 2, len: 54543, size: 432},
  {name: 3, len: 3243, size: 432},
  {name: 4, len: 543, size: 432},
  {name: 5, len: 543, size: 654},
  {name: 6, len: 654, size: 654},
  {name: 7, len: 765, size: 654},
  {name: 8, len: 765, size: 765},
  {name: 9, len: 53, size: 654}
  ];
 
  var a = data;
  if ( a != null ){
  for(var i=0; ia.length; i++){
  var d = a[i];
  $(#tb_video).append(' \
  tr \
  tdinput
  type=checkbox //td \
  td' + d.name + '/td \
  td' + d.len + '/td \
  td' + d.size + '/td \
  tr ');
  }
  }
 
  $(#tb_video).closest(tr).append(' \
  td width=80px align=center
  style=vertical-align:top \
 
   input id=pl_bt_up type=button value=↑ / \
 
   input id=pl_bt_down type=button value=↓ /
  \
  /td ');
  // */
  $(#pl_bt_up).click(function() {
  var $all = $(#tb_video tr);
  var $trs = $(#tb_video tr:has(input:checked));
  if( $all.index($trs.get(0)) != 1 ){
  $trs.each(function(){
  $(this).prev().before($(this));
  });
  }
  });
 
  $(#pl_bt_down).click(function() {
  var $all = $(#tb_video tr);
  var $trs = $(#tb_video tr:has(input:checked));
 
  if( $all.index( $trs.get($trs.length-1) ) !=
  $all.length-1 ){
  for( i = $trs.length-1; i=0; i-- ) {
  var $item = $( $trs.get(i) );
  

Re: [jQuery] Re: Very Strange !!! The same HTML code works well, but append() it not !!!

2009-12-07 Thread Eric Zhong
i have modified the code , but the result is the same, even if i write this
in one line !!! Help !!!

one line version:


html
head
script src=http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js
/script
SCRIPT LANGUAGE=JavaScript
!--
$(function(){
// /*
var html_video ='table id=tb_all width=724pxtrtd
valign=toptable id=tb_video class=tb_widthtr
class=tb_headtdnbsp/tdtdfilename/tdtdlen(s)/tdtdsize(KB)/td/tr/table/td/tr/table';

$(body).append( html_video );

var data =
[
{name: 1, len: 432, size: 321},
{name: 2, len: 54543, size: 432},
{name: 3, len: 3243, size: 432},
{name: 4, len: 543, size: 432},
{name: 5, len: 543, size: 654},
{name: 6, len: 654, size: 654},
{name: 7, len: 765, size: 654},
{name: 8, len: 765, size: 765},
{name: 9, len: 53, size: 654}
];

var a = data;
if ( a != null ){
for(var i=0; ia.length; i++){
var d = a[i];
$(#tb_video).append('trtdinput type=checkbox
//tdtd' + d.name + '/tdtd' + d.len + '/tdtd' + d.size +
'/tdtr');
}
}

$(#tb_video).closest(tr).append('td width=80px
align=center style=vertical-align:topinput id=pl_bt_up type=button
value=↑ /input id=pl_bt_down type=button value=↓ //td');
// */
$(#pl_bt_up).click(function() {
var $all = $(#tb_video tr);
var $trs = $(#tb_video tr:has(input:checked));
if( $all.index($trs.get(0)) != 1 ){
$trs.each(function(){
$(this).prev().before($(this));
});
}
});

$(#pl_bt_down).click(function() {
var $all = $(#tb_video tr);
var $trs = $(#tb_video tr:has(input:checked));

if( $all.index( $trs.get($trs.length-1) ) != $all.length-1
){
for( i = $trs.length-1; i=0; i-- ) {
var $item = $( $trs.get(i) );
$item.insertAfter($item.next());
}
}
});
});
--
/SCRIPT
/head
body
!--
table id=tb_all width=724px
tr
td valign=top
table id=tb_video class=tb_width
tr class=tb_head
tdnbsp/td
tdfilename/td
tdlen(s)/td
tdsize(KB)/td
/tr
trtdinput type=checkbox
//tdtd1/tdtd222/tdtd432/td/tr
trtdinput type=checkbox
//tdtd2/tdtd333/tdtd543/td/tr
trtdinput type=checkbox
//tdtd3/tdtd444/tdtd654/td/tr
trtdinput type=checkbox
//tdtd4/tdtd555/tdtd765/td/tr
trtdinput type=checkbox
//tdtd5/tdtd666/tdtd876/td/tr
trtdinput type=checkbox
//tdtd6/tdtd777/tdtd432/td/tr
trtdinput type=checkbox
//tdtd7/tdtd888/tdtd543/td/tr
trtdinput type=checkbox
//tdtd8/tdtd999/tdtd265/td/tr
/table
/td
td width=80px align=center style=vertical-align:top
input id=pl_bt_up type=button value=↑ /
input id=pl_bt_down type=button value=↓ /
/td
/tr
/table
--
/body
/html





2009/12/8 seasoup seas...@gmail.com

 javascript cant read strings over line breaks.

   $(#tb_video).append(' \
  tr \
  tdinput
  type=checkbox //td \
  td' + d.name + '/td \
  td' + d.len + '/td \
  td' + d.size + '/td \
  tr ');

 must be

   $(#tb_video).append('tr'+
  'tdinput type=checkbox
 //td'+
  'td' + d.name + '/td'+
  'td' + d.len + '/td'+
  'td' + d.size + '/td'+
  'tr ');

 On Dec 7, 6:30 pm, Eric Zhong ericiszhongwen...@gmail.com wrote:
  html
  head
  script src=http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/
  jquery.js/script
  SCRIPT LANGUAGE=JavaScript
  !--
  $(function(){
  // /*
  var html_video = ' \
  table id=tb_all width=724px \
  tr \
  td valign=top \