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']+")\"> ";
html+="<img src=\"gfx/delete.gif\" class=\"delete\" alt=\"delete\"/ onclick=\"deleteStyle("+styles[i]['id']+")\"> ";
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?