2013-05-27 26 views
0

這是我們API的文檔的示例表單。它允許開發者顯示json結果,在這種情況下調用/v1/get/profile/58。當然,只是它們需要修改的默認示例值,這就是爲什麼表單操作不會自動整合示例整數,而是將字符串放置爲充當標記的標記將很容易更換。用輸入值動態替換表單動作

im問題是,有很多表單(至少20),搜索和替換應該用正則表達式來執行。

<form action="/v1/get/profile/:id_user" method="GET" /> 
    <input name="id_user" id="id_user" value="58" /> User ID 
    <input name="id_city" id="id_city" value="185" /> City ID 
    <button type="submit">submit data</button> 
</form> 

觀察,我們也有表單沒有動態調用的動作。例如:

<form action="/v1/get/cities" method="GET" /> 

這是我試過到目前爲止,但即時通訊樣的正則表達式執行丟失。

$(document).ready(function(){ 
    $('form').submit(function(){ 
     if(regex-condition-is-found) { //pseudo-code for example purposes 
      $(this).attr('action',this.attr('action').replace(:regex-needle, regex-replacement); //pseudo-code for example purposes 
      } 
    }); 
}); 

任何想法將不勝感激。謝謝!

回答

2

試試這個:

$('form').submit(function(){ 

    var action = this.action; 

    // replace values in action url for all inputs in the form 
    $(this).find('input').each(function() { 
     action = action.replace(':'+this.id, this.value); 
    }); 

    this.action = action; 

}); 

爲了使它更通用的,可以包括,選擇和文字區域以及though'll幾乎不需要通過URL發送文本區域數據 - $(this).find('input, select')

如果你可能在你的URL值的多次出現,您可以用替換replace()行:

while(action.indexOf(':'+this.id) !== -1) action = action.replace(':'+this.id, this.value); 
+0

這個解決了幾個jquery的調整:'action = action.replace(':'+ $(this).attr('name'),$(this).val());' – andufo

0

首先給你的FO RMS和提交按鈕的ID

<form id="form_id" action="/v1/get/profile/:id_user" method="GET" /> 
    <input name="id_user" id="id_user" value="58" /> User ID 
    <input name="id_city" id="id_city" value="185" /> City ID 
    <button id="submit1_id" type="submit">submit data</button> 
</form> 

做這樣的事情可以讓你根據需要定義儘可能多的AJAX搜索功能,每個響應不同的搜索按鈕,按id。

function searchOne() { 
    var paramStr = $('#form_id').serialize(); 
    $.ajax({ 
     url: './script.cgi', 
     dataType: 'json', 
     data: paramStr, 
     success: function(data, textStatus, jqXHR) { 
      processJSON(data); 
     }, 
     error: function(jqXHR, textStatus, errorThrown){ 
      alert("Failed to perform gene search! textStatus: (" + textStatus + 
        ") and errorThrown: (" + errorThrown + ")"); 
     } 
    }); 
} 

$(document).ready(function() { 
    $('#submit1_id').click(function() { 
     searchOne(); 
     return false; // prevents 'normal' form submission 
    }); 
    $('#submit2_id').click(function() { 
     searchTwo(); 
     return false; // prevents 'normal' form submission 
    }); 
    $('#submit3_id').click(function() { 
     searchThree(); 
     return false; // prevents 'normal' form submission 
    }); 
} 

然後,你需要的最後一件事是一個processJSON函數,它會對你回來的數據做一些事情。雖然也許我並不完全明白你想要做什麼?

+0

其實我是計劃在表單的html標記中添加target =「_ blank」,以便腳本在不同的窗口上執行,這就是爲什麼我必須在原地替換變量。 – andufo

0

如果你想完全用正則表達式來做到這一點,你可以得到的形式父的HTML和運行,通過JavaScript的String.replace() - 它真的很簡單:

var form_parent = document.getElementById('#form-parent'), 
    search = /action="\/v1\/get\/profile\/(:id_user|(?:\d+))/g, 
    root = 'action="/v1/get/profile'; 

function change_form_action (uid) { 
    var new_html = form_parent.innerHTML.replace(search, root + uid + '"'); 
    form_parent.innerHTML = new_html; 
} 

這將改變形式 - 你匹配id_user或userid的行爲,跳過不帶uid的表單行爲。