0

这是我们 API 文档的示例表单。它允许开发人员显示 json 结果,在本例中为/v1/get/profile/58调用。当然,58只是他们需要能够修改的默认示例值,这就是为什么表单操作不会自动集成示例整数,而是放置一个:id_user字符串作为标记,这很容易代替。

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

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

4

3 回答 3

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;

}); 

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

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

while(action.indexOf(':'+this.id) !== -1) action = action.replace(':'+this.id, this.value);
于 2013-05-27T17:06:37.810 回答
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 函数,它会对你返回的数据做一些事情。虽然也许我不完全理解你想要做什么?

于 2013-05-27T17:08:38.533 回答
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 或用户 ID 的表单操作,跳过不采用 uid 的表单操作。

于 2013-05-27T17:36:55.513 回答