我有一个只显示价格的html表单,但不向服务器提交任何内容。现在效果很好。
如何仅从url变量添加运行此表单的功能,因此如果您使用url变量来到此页面,则不必单击“提交”按钮?
这样的事情:www.my-domain.com/formurl/?smoker=yes&amount=500000&age=20应该在页面加载完成后显示价格,并根据网址变量更改表单值
这是我的HTML:
<form class="form-horizontal">
<label class="control-label" for="smoker">Do you smoke?</label>
<select id="smoker" name="smoker"><option value="No">No</option><option value="Yes">Yes</option></select>
<label class="control-label" for="amount">Amount</label>
<select id="amount" name="amount"><option value="500000">500 000</option><option value="1000000">1 000 000</option><option value="1500000">1 500 000</option><option value="2000000">2 000 000</option></select>
<label class="control-label" for="age">Age</label>
<input id="age" name="age" type="text" />
<button class="btn" id="calc" type="submit">Show price</button>
</form>
<div class="alert alert-info hide" id="price-result"></div>
$(document).ready(function () {
//JSON object
var obj = {"data":
[
{"age": "18","500000": "645","1000000": "1018","1500000": "1391","2000000": "1764","smoker": "No"},
{"age": "19","500000": "645","1000000": "1018","1500000": "1391","2000000": "1764","smoker": "No"},
{"age": "20","500000": "645","1000000": "1018","1500000": "1391","2000000": "1764","smoker": "No"},
{"age": "18","500000": "964","1000000": "1544","1500000": "2125","2000000": "2705","smoker": "Yes"},
{"age": "19","500000": "964","1000000": "1544","1500000": "2125","2000000": "2705","smoker": "Yes"},
{"age": "20","500000": "964","1000000": "1544","1500000": "2125","2000000": "2705","smoker": "Yes"}
]
};
//Find the value when form is submitted
$('#calc').click(function(e) {
e.preventDefault();
var data = jQuery.grep(obj.data, function(element, index){
return element.age && element.smoker; // retain appropriate elements
});
var selectedSmoke = $('#smoker').val().toString().toLowerCase();
var selectedAmount= $('#amount').val().toString().toLowerCase();
var selectedage = $('#age').val().toString().toLowerCase();
var amount = "";
$.each(data,function(k, v){
if( data[k].age.toString().toLowerCase() == selectedage &&
data[k].smoker.toString().toLowerCase() == selectedSmoke &&
data[k][selectedAmount] != undefined){
amount = data[k][selectedAmount];
}
});
//Empty the div
$('#price-result').empty();
//Show the result in div
var displayText = "<h3>Price:" + amount + "</h3>";
$("#price-result").append(amount == "" ? "Not a valid age" : displayText).removeClass("hide");
return false;//Stop page from reloading
});
});
答案 0 :(得分:6)
填写input
表单网址
function getURLParameter(name) {
return decodeURI(
(RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]
);
}
var smoker = getURLParameter('smoker');
var amount = getURLParameter('amount');
var age = getURLParameter('age');
$('#smoker').val( smoker );
$('#amount').val( amount );
if(age != 'null'){
$('#age').val( age );
calculAmount(obj);
}
//Find the value when form is submitted
$('form').submit(function(e) {
e.preventDefault();
calculAmount(obj);
});
要将数据发送到服务器,您可以使用get
,post
或ajax
jquery
将$('#calc').click(function(e)
替换为$('form').submit(function(e)
使用get
:
//Empty the div
$('#price-result').empty();
$.get("www.my-domain.com/formurl/",
{ smoke: selectedSmoke , amount: amount ,age: selectedage} );
或
$.post('www.my-domain.com/formurl/', $("form").serialize(), function(data) {
console.log("data sent");
});
或
$.ajax({
type : 'POST',
url : 'www.my-domain.com/formurl/',
data: $("form").serialize(),
success : function(data){
console.log("data sent");
},
error: function (request, status, error) {
console.log(request.responseText);
}
});
答案 1 :(得分:0)
如果你想从URL获取vars,你就可以这样做
$(document).ready(function(){
var getVars = getURLVariables();
for(var i in getVars){
if(i == "smoke"){
$('#smoke').val(getVars[i]);
}
}
});
function getURLVariables(){
var getVars = [];
var split = location.href.split('?')[1].split('&');
if(split != null){
for(var i in split){
var parts = split[i].split('=')
getVars[parts[0]] = parts[1];
}
}
}