使用输入值动态替换表单操作

时间:2013-05-27 16:56:40

标签: jquery regex forms replace

这是我们API的文档的示例表单。它允许开发人员显示json结果,在这种情况下是 / v1 / get / profile / 58 调用。当然, 58 只是他们需要能够修改的默认示例值,这就是表单操作不会自动集成示例整数的原因,而是放置:id_user < / strong>用作易于替换的令牌的字符串。

我有的问题是,有很多表格(至少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
            }
    }); 
});

任何想法都将不胜感激。谢谢!

3 个答案:

答案 0 :(得分: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;

}); 

为了使它更通用,你可以包括,选择和textareas尽管几乎不需要通过URL发送textarea数据 - $(this).find('input, select')

如果您的网址中可能出现多个值,则可以将replace()行替换为:

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

答案 1 :(得分:0)

首先提供表单并提交按钮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函数,可以对你得到的数据做些什么。虽然也许我不能确切地理解你想要做什么?

答案 2 :(得分:0)

如果你想完全使用正则表达式,你可以获得表格的HTML&#39;父母并通过javascript&#39; 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或用户ID匹配的表单操作,跳过不带uid的表单操作。