这是我们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
}
});
});
任何想法都将不胜感激。谢谢!
答案 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的表单操作。