2016-11-12 8 views
0

私は、ajax呼び出しでDBを更新するいくつかのフォームフィールドを用意しています。 DBが正常に更新されますが、DoubleQuotesがDBに送信された場合、フォームを正しく更新することができません。#encodeForJavaScript()のJavaScriptに相当するColdFusion#

セーブSome "Quotes" are neededは、Enterを押したときにサブタスクとしてサブミットされました。

DBにはSome "Quotes" are neededが表示されます。

しかし、encodeURI(data.TASKDESCRIPTION)が使用されている場合、ページにはテキストボックスのフォーカスアウトにSome%20%22Quotes%22%20are%20neededが表示されます。

ページが最新表示されている場合、ページは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

コンテキスト@Danを理解していません。はい、それはrheデータベースに正常に取得、私はちょうどAjaxの呼び出しから戻ってきた後に再度ページに正しく表示する必要があります。特に、データベースに送られたものに二重引用符がある場合。 – shaun

答えて

3

なぜ値をtaskDescription_#subtasks.guid#にエンコードするのですか?

taskDescription_#subtasks.guid# = data.TASKDESCRIPTION; 

そして今、このライン

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

が適切に新しい値を設定しますと

この行を置き換え

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

。 jQueryの.val()は、自動的に行う必要があるすべてを行います。

関連する問題