Witam :)

Piszac pewny wazny skrypt, natrafilem na problem z funkcja eval. W FF, pokazuje ze skladnia jest bledna (mimo ze jest dobra) zas w Chrome wszystko dziala idealnie. Dlaczego tak jest ? Pokaze kod:

function loadStyles() {
  
////// odbieranie styles ajaxem, dekodowane JSON
       styles = eval('('+obj.responseText+')'); //tak, wiem, sa na to inne sposoby
/////////////
       var html="<ul id=\"styles-list\" style>";
       var IDs=new Array();
       var j =0;
       for (i=0; i<data.length-1;i++) {
         html+="<li id=\"style_"+data[i]['id']+"\">";
         html+="<img src=\"gfx/edit.gif\" class=\"edit\" alt=\"edit\"/ onclick=\"editStyle("+styles[i]['id']+")\">&nbsp;";
         html+="<img src=\"gfx/delete.gif\" class=\"delete\" alt=\"delete\"/ onclick=\"deleteStyle("+styles[i]['id']+")\">&nbsp;";
         html+=data[i]['name'];
         html+="<div id=\"dlg_"+data[i]['id']+"\"><table>";
          for (a in data[i]) html+="<tr><td>"+a+":</td><td><input type=\"text\" id=\""+data[i]['id']+"_"+a+"\"></td></tr>";
          IDs[j]=data[i]['id'];
          j++;
          html+="</table></div>";
          html+="</li>";
       }
       html+="</ul>";
          $("#styles").hide(function() { $("#styles").html(html); }).show(function() {
          for (i=0; i<IDs.length;i++) {
           for (a in data[i]) $("#"+IDs[i]+"_"+a).val(data[i][a]);
            loadStylesVar1 = IDs[i];
             $("#dlg_"+IDs[i]).dialog({ 
             autoOpen: false,
               modal: true,
               title : ("Edycja "+data[i]['name']),
               buttons: { 
                  "Zapisz": eval("function() { saveStyle("+IDs[i]+"); $(this).dialog('close'); }"), //TUTAJ !
                  "Anuluj":
                     function() {
                        $(this).dialog("close");
                     }
               } 
          });
          }
 		 $("#styles-list").sortable({
  		       update : function() {
  		         saveStylesOrder();
  		       }
  		     });
		$("#styles-list").disableSelection();
});

Generalnie chodzi o to ze odbieram liste z servera, generuje liste html, generuje Dialogi dla jQuery.

Problem polega na tym ze chce zeby po kliknieciu przycisku Zapisz zostala wywolana funkcja saveStyle z numerkiem aktualnego stylu. Kiedy robie normalnie funkcje wtedy "IDs[i]" jest undefined. Przy eval wszystko dziala dobrze... Ale tylko na Chrome. Jest jakis sposob zeby to jakos przekazac?