我有一個模板,在我正在構建的SugarCRM模塊中使用智能。如何將新文本轉換成JavaScript使用Smarty的新行
問題Smarty的代碼如下,它在一個PHP數組要求每個數組項的JavaScript函數基本上迭代...
{foreach from=$TASKS key=key item=task}
add_task_row("{$task.task_id}","{$ID}","{$task.name}","{$task.description}","{$task.status}","{$task.priority}","{$task.type}","{$task.sort_order}","{$task.heading}");
{/foreach}
,這裏是上面顯示的JavaScript函數...
function add_task_row(taskid,projectid,name,description,status,priority,type,sort,heading){
var ii = document.getElementById("project_tasks");
var num = document.getElementById("tasks_count").value;
// If TaskID is EMPTY, then assign it a new one from the row count
var taskIDTimeStamp = new Date().getTime();
//console.log('ID1: '+id);
if(taskid){
var taskid = taskid;
}else{
var taskid = taskIDTimeStamp;
}
num++;
//var prioritySelHtml = createOptions(priority);
var e = document.createElement("div");
e.setAttribute('id','task_'+num);
e.setAttribute('class','task_row');
e.innerHTML = '<span class="handle"></span>';
e.innerHTML += '<input name="taskid_'+num+'" id="taskid_'+num+'" size=15 type="hidden" value="'+taskid+'">';
e.innerHTML += '<input name="projectid_'+num+'" id="projectid_'+num+'" size=15 type="hidden" value="'+projectid+'">';
e.innerHTML += '<input name="sort_order_'+num+'" id="sort_order_'+num+'" class="sort_order" size=15 type="hidden" value="'+sort+'">';
e.innerHTML += '<input name="heading_'+num+'" id="heading_'+num+'" class="heading" size=15 type="hidden" value="'+heading+'">';
if(heading == 1){
// Add a Task Heading
e.innerHTML += '<input name="name_'+num+'" id="name_'+num+'" class="task-heading" size=45 type="text" value="'+name+'" placeholder="Type a Project Task List Heading Here...">';
e.innerHTML += '<div style="display:none; float: left; width: 400px;"><textarea name="description_'+num+'" id="description_'+num+'" rows="4" cols="50">'+description+'</textarea></div>';
e.innerHTML += '<div style="display:none; float: left; width: 100px;"><select name="status_'+num+'" id="status_'+num+'" class="status">'+buildFormSelection(statusArray, status)+'</select></div>';
e.innerHTML += '<div style="display:none; float: left; width: 90px;"><select name="priority_'+num+'" id="priority_'+num+'" class="priority">'+buildFormSelection(prioritiesArray, priority)+'</select></div>';
e.innerHTML += '<div style="display:none; float: left; width: 100px;"><select name="type_'+num+'" id="type_'+num+'" class="type">'+buildFormSelection(typesArray, type)+'</select></div>';
}else{
// Add a Task
e.innerHTML += '<input name="name_'+num+'" id="name_'+num+'" size=45 type="text" value="'+name+'">';
//e.innerHTML += '<input name="description_'+num+'" id="description_'+num+'" size=45 type="text" value="'+description+'">';
e.innerHTML += '<textarea name="description_'+num+'" id="description_'+num+'" class="edit_description" rows="1" cols="50">'+description+'</textarea>';
e.innerHTML += '<select name="status_'+num+'" id="status_'+num+'" class="status">'+buildFormSelection(statusArray, status)+'</select>';
e.innerHTML += '<select name="priority_'+num+'" id="priority_'+num+'" class="priority">'+buildFormSelection(prioritiesArray, priority)+'</select>';
e.innerHTML += '<select name="type_'+num+'" id="type_'+num+'" class="type">'+buildFormSelection(typesArray, type)+'</select>';
}
//e.innerHTML += '<button type="button" onclick="remove_item_row('+num+')"><img src="index.php?entryPoint=getImage&imageName=id-ff-clear.png"></button>';
e.innerHTML += '<button type="button" onclick="remove_item_row('+num+')"><img src="./modules/apoll_Web_Projects/assets/images/cross.png"></button>';
e.innerHTML += '<br style="clear:both;">';
document.getElementById("tasks_count").value = num;
ii.appendChild(e);
}
每次調用我的JavaScript函數add_task_row()
時,都會在DOM中插入一個新的Project Tasks Div,並在每個行中填充表單域。
這個偉大的工程的大部分時間,但是我剛纔保存不同的值到數據庫,現在當它加載這個值,它會導致JavaScript錯誤這樣的... Uncaught SyntaxError: Unexpected token ILLEGAL
當我查看網頁源我可以看到,它是1個數據庫記錄在我的源代碼引起的問題....
add_task_row("1411445999407","205e34c6-7381-92eb-e6ab-54125429cd2a","ghjfghjh","dfg dhfjhg dfgosdjkfgosdfk hgdjfhdhikfgj gsidgisfdgh
fh
dfgh
d tgh
tgj
hfghj
fg hjgh0dgoh igkoiiuwidth: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;width: 679px;","In Progress","Low","Other","3","0");
所以在這上面的代碼中,你可以看到,這個長數據庫值不裹行情出於某種原因。
任何想法如何解決這個問題,只有當DB值有像特殊字符似乎?
UPDATE,經過進一步檢查,我看到長期價值被包裹在報價,並與更多的測試,它不是導致問題的特殊字符,它是換行符!
add_task_row("1411445999407","205e34c6-7381-92eb-e6ab-54125429cd2a","ghjfghjh","gdf;dgdfdfg 679px;width: 679px;width: 679px;
dsgdfgsdfg
dfgsdfgsdfg
dfgsdfg","In Progress","Low","Other","3","0");
任何想法如何使這些換行字符串不會導致JavaScript錯誤?
做很可能是通過一個JSON編碼器發出的琴絃最好的事情。 – Pointy 2014-09-23 17:55:26