#encodeForJavaScript()的ColdFusion JavaScript等价物#

时间:2016-11-12 00:48:09

标签: javascript coldfusion

我有几个表单字段,我通过ajax调用更新数据库。 数据库已成功更新,但如果将DoubleQuotes提交给数据库,则无法正确更新表单。

当按下Enter时,Say Some "Quotes" are needed被提交为子任务。

数据库会看到Some%20%22Quotes%22%20are%20needed

但是,如果使用了encodeURI(data.TASKDESCRIPTION),页面会在文本框的焦点上看到Some "Quotes" are needed

如果页面已刷新,则页面会成功显示<cfif isDefined("action") and action is "editSubtask"> <cfquery name="udpateSubTask" datasource="#siteDataSource#"> UPDATE ProjectTaskSubtasks SET taskDescription = <cfqueryparam value="#form.TASKDESCRIPTION#" cfsqltype="cf_sql_varchar" > WHERE guid = <cfqueryparam value="#form.SUBTASKGUID#" cfsqltype="cf_sql_varchar" > </cfquery> <cfquery name="selectSubTask" datasource="#siteDataSource#"> SELECT guid as SUBTASKGUID, taskDescription FROM ProjectTaskSubtasks WHERE guid = <cfqueryparam value="#form.SUBTASKGUID#" cfsqltype="cf_sql_varchar" > LIMIT 1 </cfquery> <cfoutput>#serializeJSON(selectSubTask, "struct")#</cfoutput> <cfabort> </cfif> <!--- ----------------------------------------- ---> <cfloop query="#subtasks#"> <div id="_#subtasks.guid#" class="col-xs-12"> <input type="text" id="description-#subtasks.guid#" name="description-#subtasks.guid#" class="#subtasks.isComplete is 0 ? '' : 'strike'# subtask-hide col-xs-10" value="#EncodeForHTMLAttribute(subtasks.taskDescription)#" onClick="allowInput(this)"/> <!--- #EncodeForHTMLAttribute(subtasks.taskDescription)# Works Great for the starting Value of this TextBox from DB especially if doublequotes in subtasks.taskDescription DB Field ---> </div> <!--- ----------------------------------------- ---> <script> var taskDescription_#subtasks.guid# = "#encodeForJavaScript(subtasks.taskDescription)#"; //this appears to work as needed $('##description-#subtasks.guid#').keyup(function(e){ var code = e.which; if(code===13){ $.post( '#cgi.SCRIPT_NAME#', { action: 'editSubtask', SUBTASKGUID: $(this).parent()[0].id.replace('_',''), TASKDESCRIPTION: $(this).val() }, function(data){ data = JSON.parse(data); data = data[0]; taskDescription_#subtasks.guid# = encodeURI(data.TASKDESCRIPTION); //THIS DOES NOT WORK if doublequotes where submitted to the DB : when data comes back from editSubTask I need a way to update my Variable so on focus out it updates the field with the new information submitted . $('##formButt').focus(); } ); } }); $('##description-#subtasks.guid#').focusout(function(){ /* .val(taskDescription_#subtasks.guid#)works great HERE on FocusOut doesn't change the Value from original var taskDescription_#subtasks.guid# = "#encodeForJavaScript(subtasks.taskDescription)#" */ $('##description-#subtasks.guid#').val(taskDescription_#subtasks.guid#).removeClass('subtask').addClass('subtask-hide'); setTimeout(function(){ $('##delete-#subtasks.guid#').removeClass('subtask-cancel').addClass('subtask-cancel-hide'); },150) }); </script> </cfloop>

{{1}}

1 个答案:

答案 0 :(得分:3)

为什么你甚至要将值编码到taskDescription_#subtasks.guid#开始?

替换此行

taskDescription_#subtasks.guid# = encodeURI(data.TASKDESCRIPTION);

taskDescription_#subtasks.guid# = data.TASKDESCRIPTION;

现在这一行

$('##description-#subtasks.guid#').val(taskDescription_#subtasks.guid#).removeClass('subtask').addClass('subtask-hide');

将正确设置新值。 jQuery的.val()完成了所有需要自动完成的事情。