2013-03-12 73 views
-3

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

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(); 

现在我遇到了特殊字符的问题。如果数据的任何属性包含任何特殊字符,则它将转换为某些垃圾字符。任何关于如何解决这个问题的指针。

+0

Smths,如:http://stackoverflow.com/questions/1787322/htmlspecialchars-equivalent -in-javascript 这是? – ZloyPotroh 2013-03-12 18:10:25

+0

我遇到了ISO 8859-1符号实体的问题,如§ £等 – 2013-03-12 18:15:28

回答

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 : '[email protected]#*&^[email protected]$)@^#$', 
    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(); 
+0

感谢队友......这工作就像一个魅力...... :) – 2013-03-14 19:15:44

0
  • 什么是特殊字符?
  • data从哪里来?
  • 什么是data的价值?

课的一天:与其if (typeof data != undefined)...你可以做if (data)...

+0

数据是一个包含来自textarea的值的js对象。我在ISO 8859-1符号实体(如§ £)中存在textarea值时遇到问题。 – 2013-03-12 18:17:37

+1

'如果(数据)'*不*代替'if(typeof data!= undefined)' – 2013-03-12 18:19:55

+0

感谢您指出if(typeof data!= undefined)。这是错误的一个更多的原因typeof返回一个字符串... :) – 2013-03-12 18:20:35