使用javascript提交rails表单
我有以下表格:使用javascript提交rails表单,javascript,jquery,ruby-on-rails,Javascript,Jquery,Ruby On Rails,我有以下表格: <% category.child_categories.sort_by(&:name).each do |child_category| %> <%= form_tag (search_path), :method => "get", class: "search-form" do %> <label for="checkData" style="cursor: pointer;" class="sear
<% category.child_categories.sort_by(&:name).each do |child_category| %>
<%= form_tag (search_path), :method => "get", class: "search-form" do %>
<label for="checkData" style="cursor: pointer;" class="search">
<%= hidden_field_tag :shop_search, child_category.id %>
<i class="fas fa-search"></i> <%= child_category.name %>
</label>
<%= submit_tag '', :style => "display: none;" %>
<% end %>
<% end %>
当cookies[:coordinates]不存在时,我必须首先创建cookie,然后触发
函数setGeoCookie
中的表单。但由于一些奇怪的原因,表格没有提交。知道我可能做错了什么吗?在函数$中(这个)
有另一个作用域。在执行函数之前尝试存储表单。那就行了
$(".search").click(function(e){
var form = $(this).parent('form.search-form')
<% if cookies[:coordinates].blank? %>
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(setGeoCookie, displayError);
} else {
alert("Geolocation is not supported by the browser you are currently using. Supported browsers: Chrome 5.0, Firefox 3.5, Internet Explorer 9.0, Opera 10.60, Safari 5.0");
}
function setGeoCookie(position) {
let cookieName = "coordinates";
let now = new Date();
let time = now.getTime();
time += 3600 * 5000;
now.setTime(time);
let cookie_val = position.coords.latitude + "|" + position.coords.longitude;
document.cookie = cookieName +"=" + cookie_val + '; path=/';
form.trigger('submit.rails');
}
function displayError(error) {
let errors = {
1: 'error',
2: 'Position unavailable',
3: 'Request timeout'
};
alert("Error: " + errors[error.code]);
window.location.reload(true)
}
getLocation();
<% else%>
form.trigger('submit.rails');
<% end %>
});
$(“.search”)。单击(函数(e){
var form=$(this.parent('form.search form'))
if(导航器.地理位置){
navigator.geolocation.getCurrentPosition(setGeoCookie,displayError);
}否则{
警报(“您当前使用的浏览器不支持地理位置。支持的浏览器:Chrome 5.0、Firefox 3.5、Internet Explorer 9.0、Opera 10.60、Safari 5.0”);
}
函数setGeoCookie(位置){
让cookieName=“坐标”;
让我们现在=新日期();
让time=now.getTime();
时间+=3600*5000;
现在。设置时间(time);
让cookie_val=position.coords.latitude+“|”+position.coords.longitude;
document.cookie=cookieName+“=”+cookie_val+”;路径=/”;
form.trigger('submit.rails');
}
函数显示错误(错误){
让错误={
1:'错误',
2:‘职位不可用’,
3:'请求超时'
};
警报(“错误:+错误[错误代码]);
window.location.reload(true)
}
getLocation();
form.trigger('submit.rails');
});
谢谢@Archer的帮助。。。它很好用!:))
$(".search").click(function(e){
var form = $(this).parent('form.search-form')
<% if cookies[:coordinates].blank? %>
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(setGeoCookie, displayError);
} else {
alert("Geolocation is not supported by the browser you are currently using. Supported browsers: Chrome 5.0, Firefox 3.5, Internet Explorer 9.0, Opera 10.60, Safari 5.0");
}
function setGeoCookie(position) {
let cookieName = "coordinates";
let now = new Date();
let time = now.getTime();
time += 3600 * 5000;
now.setTime(time);
let cookie_val = position.coords.latitude + "|" + position.coords.longitude;
document.cookie = cookieName +"=" + cookie_val + '; path=/';
form.trigger('submit.rails');
}
function displayError(error) {
let errors = {
1: 'error',
2: 'Position unavailable',
3: 'Request timeout'
};
alert("Error: " + errors[error.code]);
window.location.reload(true)
}
getLocation();
<% else%>
form.trigger('submit.rails');
<% end %>
});