2012-05-13 62 views
1

我試圖從textarea中獲取包裝換行符而不需要進行任何服務器調用。 This answer讓我有90%的方式。問題在於,每次單擊提交按鈕時,頁面都會重新加載到iframe中。下面的代碼:html - 從textarea獲取包裝文本

<html><body> 
<script type="text/javascript"> 

    function getURLParameter(qs, name) { 
     var pattern = "[\\?&]"+name+"=([^&#]*)"; 
     var regex = new RegExp(pattern); 
     var res = regex.exec(qs); 
     if (res == null) 
     return ""; 
     else 
     return res[1]; 
    } 

    function getHardWrappedText() { 
     var frm_url = document.getElementById('frame').contentDocument.URL; 
     var text = unescape(getURLParameter(document.getElementById('frame').contentDocument.URL, 'text')).replace(/\+/g,' '); 
     return text; 
    } 

    function onIFrameLoad() { 
     var text = getHardWrappedText(); 
     console.log(text); 
    } 

    window.onload = function() { console.log("loading") } ; 

</script> 
<form name="form" method="get" target="frame"> 
    <textarea id="text" name="text" cols=5 wrap="hard">a b c d e f</textarea> 
    <input type="submit"> 
</form> 
<iframe id="frame" name="frame" onload="onIFrameLoad()" style="display:none;"></iframe> 

點擊提交按鈕使輸出:

loading 
a b c d e 
f 

有沒有辦法阻止的iframe從重新加載頁面?

回答

0

您必須將false返回給表單的onsubmit事件。

<form name="form" method="get" target="frame" onsubmit="onIFrameLoad">

如果它是基於你不希望加載某些條件

function onIFrameLoad() { 
    var text = getHardWrappedText(); 
    console.log(text); 
    if(text.indexOf('\n')<0) return false; 
} 

我只是把一個隨意的事情在text.indexOf('\n')<0,你可以有任何有意義或總是返回false (這看起來不太可能)

+0

我總是希望提交表單,而不是整個頁面重新加載。有沒有創建一個空的iframe? – user1391697

+0

要提交內容並且沒有可視指示,您可以定義非常小的iframe(1x1),因爲'display:none'在iframe上不能很好地工作。如果意圖是在後臺提交某些內容,我會建議使用AJAX。 – fozylet

+0

我不擔心內容顯示('display:none;'照顧就好了)。我不想重新運行'window.onload'中的邏輯。那有意義嗎? – user1391697