JQuery未转义字符串错误

时间:2013-11-08 15:10:38

标签: jquery

我不知道如何命名,但我会尝试描述。

$(document).on('click','.swaction',function(event){
    var pdfId = $(this).closest('tr').find('td:first').html(); // Example: 44!F=%7214
    var type = $(this).closest('tr').data('type');
    var tableId = $(this).closest('table').attr('id');
    var currentElement = this;
    event.preventDefault();

    if( $(currentElement).data('action') === 'get' )
    {
      window.location.href = "/Printbox.php/ct_form_procesar_escaneos/pdf/get/" + type + "/" + pdfId;
    }

    if( $(currentElement).data('action') === 'rename' )
    {
      $(currentElement).closest('tr').find('td:first').html(
        '<input id="newPdfName-'+pdfId+'" type="text" name="newPdfName" />'+
        '<select id="newPdfType-'+pdfId+'" type="text" name="newPdfType">'+
        '<option selected="selected" disabled="disabled" value="">Tipo de Documento</option>'+
        '<option value="cp">CP</option>'+
        '<option value="tb">TB</option>'+
        '</select>');
      $('#newPdfName-'+pdfId).val(pdfId); // THIS doesn't work. Field is empty.
      $.procesar_escaneos.linksHtml = $(currentElement).parent().html();
      $(currentElement).parent().html('<a class="swaction" data-action="save" href="#">Guardar</a> | '
        + '<a class="swaction" data-action="cancel" href="#">Cancelar</a>'); // This line doesn't seem to execute, the buttons/links are not replaced.
    }

这适用于数字和字母,但当pdfId取值为($等时,网络会中断。

显然这些角色有问题,但我不知道如何逃脱它们。

示例pdfId = 44!F=%7214

2 个答案:

答案 0 :(得分:1)

从这个回答:HTML-encoding lost when attribute read from input field

function htmlEncode(value){
    //create a in-memory div, set it's inner text(which jQuery automatically encodes)
  //then grab the encoded contents back out.  The div never exists on the page.
  return $('<div/>').text(value).html();
 }

function htmlDecode(value){
  return $('<div/>').html(value).text();
}

现在用它包装你的pdfIds:

  '<input id="newPdfName-'+ htmlEcode(pdfId)+'" type="text" name="newPdfName" />'

请注意,您的属性的名称不是您最初预期的名称,您可能需要与htmlDecode共舞以确保您的脚本正常运行。

答案 1 :(得分:1)

问题不在于id,而在于jQuery选择,这意味着如果你想保持相同的id而不进行编码,你可以使用它来改变值:

 $(document.getElementById('newPdfName-' + pdfId)).val(pdfId)

在这里工作小提琴:http://jsfiddle.net/PmVwz/1/