-3

我正在动态创建一个表单并像下面的代码一样提交它,其中数据是一个 js 对象。

var inputStr = '';
if (typeof data != undefined) {
  for (var prop in data) {
    if (data.hasOwnProperty(prop)) {
       inputStr += "<input type='text' name='" + prop + "' value='" + data[prop] + "' />";
    }
  }
}
var form = $('<form style="display:none;" action="/someurl.do" method="post">' + inputStr + '</form>');
$('body').append(form);
$(form).attr('target', '_blank');
$(form).submit();

现在我遇到了特殊字符的问题。如果数据的任何属性包含任何特殊字符,则会将其转换为一些垃圾字符。有关如何解决此问题的任何指示。

4

2 回答 2

1

问题是您通过连接字符串手动创建元素。您可以通过将封闭标记传递给 jQuery 对象来动态创建元素。例如,如果您想创建一个新<input/>元素,只需执行以下操作:

var input = $('<input/>');

如果您需要指定该元素的属性/属性,请传入一个对象作为第二个参数,如下所示:

var input = $('<input/>',{
    name : 'theName',
    value : 'theValue'
});

以这种方式传递的值将被正确转义(特殊字符将被解析)。你也可以这样做:

var input = $('<input/>',{
    name : 'theName'
}).val('theValue');

我相应地重构了您的代码:

http://jsfiddle.net/vdxnn/1/

//Sample data
var data = {
    field1 : 'Q@#*&^$@$)@^#$',
    field2 : 'value2',
};

//Create the form
var form = $('<form/>',{
    target: 'blank',
    action: '/someurl.do',
    method: 'post'
    //NOTE: `style : 'display:none'` isn't necessary;
    //      just use the hide() method
});

//Loop through data object
if (typeof data !== 'undefined') {
  for (var prop in data) {
      //Create a new <input/> element
      var input = $('<input/>',{
          type:'text',
          name: prop,
          value: data[prop]
      });
      //Append it to the form
      form.append(input);
  }
}

//Hide the form
form.hide()

//Append the form to the body
$('body').append(form);

//Submit the form
$(form).submit();
于 2013-03-12T18:30:03.540 回答
0
  • 什么是特殊字符?
  • 是从哪里来data的?
  • 的价值是什么data

每日一课:if (typeof data != undefined)...你可以做if (data)...

于 2013-03-12T18:12:20.250 回答