2013-03-12 44 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