javascript: refresh same page with query string from selects
I have 2 selects
: month and year. When the user selects the year and the month then I want to redirect to the same page with a query string produced by the selections.
So this is what I have done:
<div id="custom-select1" class="custom-select" style="width:200px;">
<select name="month" onchange="if (this.value) window.location.href=this.value">
<option value="0">Select Month:</option>
<option value="?date_from={value-from-year-select}-01-01&date_to={value-from-year-select}-01-31&courses=on&events=on">January</option>
<option value="..">February</option>
<option value="..">March</option>
<option value="..">April</option>
<option value="..">May</option>
<option value="..">June</option>
<option value="..">July</option>
<option value="..">August</option>
<option value="..">September</option>
<option value="..">Octomber</option>
<option value="..">November</option>
<option value="..">December</option>
</select>
</div>
<div class="custom-select" style="width:200px;">
<select name="year" >
<option value="2000">Select Year:</option>
<option value="2018">2018</option>
<option value="2019">2019</option>
<option value="2020">2020</option>
<option value="2021">2021</option>
<option value="2022">2022</option>
<option value="2023">2023</option>
</select>
</div>
How I can replace {value-from-year-select}
to get the value of the year
selected?
javascript html select
add a comment |
I have 2 selects
: month and year. When the user selects the year and the month then I want to redirect to the same page with a query string produced by the selections.
So this is what I have done:
<div id="custom-select1" class="custom-select" style="width:200px;">
<select name="month" onchange="if (this.value) window.location.href=this.value">
<option value="0">Select Month:</option>
<option value="?date_from={value-from-year-select}-01-01&date_to={value-from-year-select}-01-31&courses=on&events=on">January</option>
<option value="..">February</option>
<option value="..">March</option>
<option value="..">April</option>
<option value="..">May</option>
<option value="..">June</option>
<option value="..">July</option>
<option value="..">August</option>
<option value="..">September</option>
<option value="..">Octomber</option>
<option value="..">November</option>
<option value="..">December</option>
</select>
</div>
<div class="custom-select" style="width:200px;">
<select name="year" >
<option value="2000">Select Year:</option>
<option value="2018">2018</option>
<option value="2019">2019</option>
<option value="2020">2020</option>
<option value="2021">2021</option>
<option value="2022">2022</option>
<option value="2023">2023</option>
</select>
</div>
How I can replace {value-from-year-select}
to get the value of the year
selected?
javascript html select
Is the goal to not catch the event with javascript and then do the redirect? What if the user choses month and wants to change year after? Why not make it a simple form with a submit button and method GET if you don't want to catch the event and read the data?
– Patrick
Nov 26 '18 at 12:13
@Patrick because the big idea is to create a calendar which will be filtered with the selected values of these selects. So I don't want to add a button, but if it's not possible then I will use one
– dvn22
Nov 26 '18 at 12:16
So what you want to do is catch the change of the select boxes, see if the user has selected any values and then redirect the user depending on values chosen. If you don't want to build javascript separately you would have to check the value of "year" in the onchange attribute.
– Patrick
Nov 26 '18 at 12:23
@Patrick ok I think I got it... So I will have to use 2 onchange (one for each select) and check if there is a value selected in the other and pass both values to the query string. right?
– dvn22
Nov 26 '18 at 12:27
add a comment |
I have 2 selects
: month and year. When the user selects the year and the month then I want to redirect to the same page with a query string produced by the selections.
So this is what I have done:
<div id="custom-select1" class="custom-select" style="width:200px;">
<select name="month" onchange="if (this.value) window.location.href=this.value">
<option value="0">Select Month:</option>
<option value="?date_from={value-from-year-select}-01-01&date_to={value-from-year-select}-01-31&courses=on&events=on">January</option>
<option value="..">February</option>
<option value="..">March</option>
<option value="..">April</option>
<option value="..">May</option>
<option value="..">June</option>
<option value="..">July</option>
<option value="..">August</option>
<option value="..">September</option>
<option value="..">Octomber</option>
<option value="..">November</option>
<option value="..">December</option>
</select>
</div>
<div class="custom-select" style="width:200px;">
<select name="year" >
<option value="2000">Select Year:</option>
<option value="2018">2018</option>
<option value="2019">2019</option>
<option value="2020">2020</option>
<option value="2021">2021</option>
<option value="2022">2022</option>
<option value="2023">2023</option>
</select>
</div>
How I can replace {value-from-year-select}
to get the value of the year
selected?
javascript html select
I have 2 selects
: month and year. When the user selects the year and the month then I want to redirect to the same page with a query string produced by the selections.
So this is what I have done:
<div id="custom-select1" class="custom-select" style="width:200px;">
<select name="month" onchange="if (this.value) window.location.href=this.value">
<option value="0">Select Month:</option>
<option value="?date_from={value-from-year-select}-01-01&date_to={value-from-year-select}-01-31&courses=on&events=on">January</option>
<option value="..">February</option>
<option value="..">March</option>
<option value="..">April</option>
<option value="..">May</option>
<option value="..">June</option>
<option value="..">July</option>
<option value="..">August</option>
<option value="..">September</option>
<option value="..">Octomber</option>
<option value="..">November</option>
<option value="..">December</option>
</select>
</div>
<div class="custom-select" style="width:200px;">
<select name="year" >
<option value="2000">Select Year:</option>
<option value="2018">2018</option>
<option value="2019">2019</option>
<option value="2020">2020</option>
<option value="2021">2021</option>
<option value="2022">2022</option>
<option value="2023">2023</option>
</select>
</div>
How I can replace {value-from-year-select}
to get the value of the year
selected?
javascript html select
javascript html select
asked Nov 26 '18 at 12:04
dvn22dvn22
937
937
Is the goal to not catch the event with javascript and then do the redirect? What if the user choses month and wants to change year after? Why not make it a simple form with a submit button and method GET if you don't want to catch the event and read the data?
– Patrick
Nov 26 '18 at 12:13
@Patrick because the big idea is to create a calendar which will be filtered with the selected values of these selects. So I don't want to add a button, but if it's not possible then I will use one
– dvn22
Nov 26 '18 at 12:16
So what you want to do is catch the change of the select boxes, see if the user has selected any values and then redirect the user depending on values chosen. If you don't want to build javascript separately you would have to check the value of "year" in the onchange attribute.
– Patrick
Nov 26 '18 at 12:23
@Patrick ok I think I got it... So I will have to use 2 onchange (one for each select) and check if there is a value selected in the other and pass both values to the query string. right?
– dvn22
Nov 26 '18 at 12:27
add a comment |
Is the goal to not catch the event with javascript and then do the redirect? What if the user choses month and wants to change year after? Why not make it a simple form with a submit button and method GET if you don't want to catch the event and read the data?
– Patrick
Nov 26 '18 at 12:13
@Patrick because the big idea is to create a calendar which will be filtered with the selected values of these selects. So I don't want to add a button, but if it's not possible then I will use one
– dvn22
Nov 26 '18 at 12:16
So what you want to do is catch the change of the select boxes, see if the user has selected any values and then redirect the user depending on values chosen. If you don't want to build javascript separately you would have to check the value of "year" in the onchange attribute.
– Patrick
Nov 26 '18 at 12:23
@Patrick ok I think I got it... So I will have to use 2 onchange (one for each select) and check if there is a value selected in the other and pass both values to the query string. right?
– dvn22
Nov 26 '18 at 12:27
Is the goal to not catch the event with javascript and then do the redirect? What if the user choses month and wants to change year after? Why not make it a simple form with a submit button and method GET if you don't want to catch the event and read the data?
– Patrick
Nov 26 '18 at 12:13
Is the goal to not catch the event with javascript and then do the redirect? What if the user choses month and wants to change year after? Why not make it a simple form with a submit button and method GET if you don't want to catch the event and read the data?
– Patrick
Nov 26 '18 at 12:13
@Patrick because the big idea is to create a calendar which will be filtered with the selected values of these selects. So I don't want to add a button, but if it's not possible then I will use one
– dvn22
Nov 26 '18 at 12:16
@Patrick because the big idea is to create a calendar which will be filtered with the selected values of these selects. So I don't want to add a button, but if it's not possible then I will use one
– dvn22
Nov 26 '18 at 12:16
So what you want to do is catch the change of the select boxes, see if the user has selected any values and then redirect the user depending on values chosen. If you don't want to build javascript separately you would have to check the value of "year" in the onchange attribute.
– Patrick
Nov 26 '18 at 12:23
So what you want to do is catch the change of the select boxes, see if the user has selected any values and then redirect the user depending on values chosen. If you don't want to build javascript separately you would have to check the value of "year" in the onchange attribute.
– Patrick
Nov 26 '18 at 12:23
@Patrick ok I think I got it... So I will have to use 2 onchange (one for each select) and check if there is a value selected in the other and pass both values to the query string. right?
– dvn22
Nov 26 '18 at 12:27
@Patrick ok I think I got it... So I will have to use 2 onchange (one for each select) and check if there is a value selected in the other and pass both values to the query string. right?
– dvn22
Nov 26 '18 at 12:27
add a comment |
3 Answers
3
active
oldest
votes
I would have chosen to use jquery to catch the change event (it's just what I'm used to). But my guess is that you want to keep your vanilla JS approach, you could write an eventlistener in javascript instead of using the onchange attribute. But here is a solution that keeps to how you work right now. Just add the javascript in a script tag in the DOM.
function customSelectChange() {
var year = document.getElementsByName("year");
var month = document.getElementsByName("month");
if(year[0].value !== "0" && month[0].value !== "0"){
// DO your redirect
alert(year[0].value+'-'+month[0].value);
}
}
https://jsfiddle.net/4d9phtgv/
add a comment |
With delay
const month = document.getElementById('month');
const year = document.getElementById('year');
function handleChange() {
if (month.value && year.value) {
const urlSearch = new URLSearchParams();
urlSearch.append('month', month.value);
urlSearch.append('year', year.value);
console.log(urlSearch.toString());
}
}
<select onchange="handleChange()" name="month" id="month">
<option value="">Choice month</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select>
<select onchange="handleChange()" name="year" id="year">
<option value="">Choice year</option>
<option value="2001">2001</option>
<option value="2002">2002</option>
<option value="2003">2003</option>
<option value="2004">2004</option>
<option value="2005">2005</option>
<option value="2006">2006</option>
<option value="2007">2007</option>
<option value="2008">2008</option>
<option value="2009">2009</option>
<option value="2010">2010</option>
<option value="2011">2011</option>
<option value="2012">2012</option>
</select>
add a comment |
You can use a form and submit it to refresh the page with the info, to add the extra fields you can use hidden inputs.
monthEnd = function(year, month) {
date = new Date(year, month - 1, 1);
var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);
return lastDay.getDate();
}
appendHidden = function(formId, name, value) {
$('#' + formId).append('<input type="text" name="' + name + '" class="hidden" value="' + value + '" />');
}
begining = function() {
year = $('#selectYear').val();
month = $('#selectMonth').val();
return year + '-' + month + '-' + '1'
}
end = function() {
year = $('#selectYear').val();
month = $('#selectMonth').val();
return year + '-' + month + '-' + monthEnd(parseInt(year), parseInt(month));
}
$( document ).ready(function() {
months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
for(i=0; i< months.length; i++) {
$('#selectMonth').append('<option value="' + (i + 1) + '">' + months[i] + '</option>');
}
for(y=2000; y<= 2023;y++) {
$('#selectYear').append('<option value="' + y + '">' + y + '</option>');
}
$('#selectMonth').on('change', function() {
appendHidden('form', 'courses', 'on');
appendHidden('form', 'events', 'on');
appendHidden('form', 'date-from', begining());
appendHidden('form', 'date-from', end());
$('#selectYear').remove();
$('#selectMonth').remove();
//$('#form').submit(); Uncomment this line to submit and refresh
alert($('#form').serialize())
});
});
.hidden {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="form" action="" method="GET">
<div id="custom-select1" class="custom-select" style="width:200px;" >
<select id="selectMonth" name="month" >
</select>
</div>
<div class="custom-select" style="width:200px;">
<select id="selectYear" name="year" ></select>
</div>
</form>
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53480727%2fjavascript-refresh-same-page-with-query-string-from-selects%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
I would have chosen to use jquery to catch the change event (it's just what I'm used to). But my guess is that you want to keep your vanilla JS approach, you could write an eventlistener in javascript instead of using the onchange attribute. But here is a solution that keeps to how you work right now. Just add the javascript in a script tag in the DOM.
function customSelectChange() {
var year = document.getElementsByName("year");
var month = document.getElementsByName("month");
if(year[0].value !== "0" && month[0].value !== "0"){
// DO your redirect
alert(year[0].value+'-'+month[0].value);
}
}
https://jsfiddle.net/4d9phtgv/
add a comment |
I would have chosen to use jquery to catch the change event (it's just what I'm used to). But my guess is that you want to keep your vanilla JS approach, you could write an eventlistener in javascript instead of using the onchange attribute. But here is a solution that keeps to how you work right now. Just add the javascript in a script tag in the DOM.
function customSelectChange() {
var year = document.getElementsByName("year");
var month = document.getElementsByName("month");
if(year[0].value !== "0" && month[0].value !== "0"){
// DO your redirect
alert(year[0].value+'-'+month[0].value);
}
}
https://jsfiddle.net/4d9phtgv/
add a comment |
I would have chosen to use jquery to catch the change event (it's just what I'm used to). But my guess is that you want to keep your vanilla JS approach, you could write an eventlistener in javascript instead of using the onchange attribute. But here is a solution that keeps to how you work right now. Just add the javascript in a script tag in the DOM.
function customSelectChange() {
var year = document.getElementsByName("year");
var month = document.getElementsByName("month");
if(year[0].value !== "0" && month[0].value !== "0"){
// DO your redirect
alert(year[0].value+'-'+month[0].value);
}
}
https://jsfiddle.net/4d9phtgv/
I would have chosen to use jquery to catch the change event (it's just what I'm used to). But my guess is that you want to keep your vanilla JS approach, you could write an eventlistener in javascript instead of using the onchange attribute. But here is a solution that keeps to how you work right now. Just add the javascript in a script tag in the DOM.
function customSelectChange() {
var year = document.getElementsByName("year");
var month = document.getElementsByName("month");
if(year[0].value !== "0" && month[0].value !== "0"){
// DO your redirect
alert(year[0].value+'-'+month[0].value);
}
}
https://jsfiddle.net/4d9phtgv/
answered Nov 26 '18 at 12:56
PatrickPatrick
220311
220311
add a comment |
add a comment |
With delay
const month = document.getElementById('month');
const year = document.getElementById('year');
function handleChange() {
if (month.value && year.value) {
const urlSearch = new URLSearchParams();
urlSearch.append('month', month.value);
urlSearch.append('year', year.value);
console.log(urlSearch.toString());
}
}
<select onchange="handleChange()" name="month" id="month">
<option value="">Choice month</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select>
<select onchange="handleChange()" name="year" id="year">
<option value="">Choice year</option>
<option value="2001">2001</option>
<option value="2002">2002</option>
<option value="2003">2003</option>
<option value="2004">2004</option>
<option value="2005">2005</option>
<option value="2006">2006</option>
<option value="2007">2007</option>
<option value="2008">2008</option>
<option value="2009">2009</option>
<option value="2010">2010</option>
<option value="2011">2011</option>
<option value="2012">2012</option>
</select>
add a comment |
With delay
const month = document.getElementById('month');
const year = document.getElementById('year');
function handleChange() {
if (month.value && year.value) {
const urlSearch = new URLSearchParams();
urlSearch.append('month', month.value);
urlSearch.append('year', year.value);
console.log(urlSearch.toString());
}
}
<select onchange="handleChange()" name="month" id="month">
<option value="">Choice month</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select>
<select onchange="handleChange()" name="year" id="year">
<option value="">Choice year</option>
<option value="2001">2001</option>
<option value="2002">2002</option>
<option value="2003">2003</option>
<option value="2004">2004</option>
<option value="2005">2005</option>
<option value="2006">2006</option>
<option value="2007">2007</option>
<option value="2008">2008</option>
<option value="2009">2009</option>
<option value="2010">2010</option>
<option value="2011">2011</option>
<option value="2012">2012</option>
</select>
add a comment |
With delay
const month = document.getElementById('month');
const year = document.getElementById('year');
function handleChange() {
if (month.value && year.value) {
const urlSearch = new URLSearchParams();
urlSearch.append('month', month.value);
urlSearch.append('year', year.value);
console.log(urlSearch.toString());
}
}
<select onchange="handleChange()" name="month" id="month">
<option value="">Choice month</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select>
<select onchange="handleChange()" name="year" id="year">
<option value="">Choice year</option>
<option value="2001">2001</option>
<option value="2002">2002</option>
<option value="2003">2003</option>
<option value="2004">2004</option>
<option value="2005">2005</option>
<option value="2006">2006</option>
<option value="2007">2007</option>
<option value="2008">2008</option>
<option value="2009">2009</option>
<option value="2010">2010</option>
<option value="2011">2011</option>
<option value="2012">2012</option>
</select>
With delay
const month = document.getElementById('month');
const year = document.getElementById('year');
function handleChange() {
if (month.value && year.value) {
const urlSearch = new URLSearchParams();
urlSearch.append('month', month.value);
urlSearch.append('year', year.value);
console.log(urlSearch.toString());
}
}
<select onchange="handleChange()" name="month" id="month">
<option value="">Choice month</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select>
<select onchange="handleChange()" name="year" id="year">
<option value="">Choice year</option>
<option value="2001">2001</option>
<option value="2002">2002</option>
<option value="2003">2003</option>
<option value="2004">2004</option>
<option value="2005">2005</option>
<option value="2006">2006</option>
<option value="2007">2007</option>
<option value="2008">2008</option>
<option value="2009">2009</option>
<option value="2010">2010</option>
<option value="2011">2011</option>
<option value="2012">2012</option>
</select>
const month = document.getElementById('month');
const year = document.getElementById('year');
function handleChange() {
if (month.value && year.value) {
const urlSearch = new URLSearchParams();
urlSearch.append('month', month.value);
urlSearch.append('year', year.value);
console.log(urlSearch.toString());
}
}
<select onchange="handleChange()" name="month" id="month">
<option value="">Choice month</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select>
<select onchange="handleChange()" name="year" id="year">
<option value="">Choice year</option>
<option value="2001">2001</option>
<option value="2002">2002</option>
<option value="2003">2003</option>
<option value="2004">2004</option>
<option value="2005">2005</option>
<option value="2006">2006</option>
<option value="2007">2007</option>
<option value="2008">2008</option>
<option value="2009">2009</option>
<option value="2010">2010</option>
<option value="2011">2011</option>
<option value="2012">2012</option>
</select>
const month = document.getElementById('month');
const year = document.getElementById('year');
function handleChange() {
if (month.value && year.value) {
const urlSearch = new URLSearchParams();
urlSearch.append('month', month.value);
urlSearch.append('year', year.value);
console.log(urlSearch.toString());
}
}
<select onchange="handleChange()" name="month" id="month">
<option value="">Choice month</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select>
<select onchange="handleChange()" name="year" id="year">
<option value="">Choice year</option>
<option value="2001">2001</option>
<option value="2002">2002</option>
<option value="2003">2003</option>
<option value="2004">2004</option>
<option value="2005">2005</option>
<option value="2006">2006</option>
<option value="2007">2007</option>
<option value="2008">2008</option>
<option value="2009">2009</option>
<option value="2010">2010</option>
<option value="2011">2011</option>
<option value="2012">2012</option>
</select>
answered Nov 26 '18 at 13:38
eustatoseustatos
368312
368312
add a comment |
add a comment |
You can use a form and submit it to refresh the page with the info, to add the extra fields you can use hidden inputs.
monthEnd = function(year, month) {
date = new Date(year, month - 1, 1);
var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);
return lastDay.getDate();
}
appendHidden = function(formId, name, value) {
$('#' + formId).append('<input type="text" name="' + name + '" class="hidden" value="' + value + '" />');
}
begining = function() {
year = $('#selectYear').val();
month = $('#selectMonth').val();
return year + '-' + month + '-' + '1'
}
end = function() {
year = $('#selectYear').val();
month = $('#selectMonth').val();
return year + '-' + month + '-' + monthEnd(parseInt(year), parseInt(month));
}
$( document ).ready(function() {
months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
for(i=0; i< months.length; i++) {
$('#selectMonth').append('<option value="' + (i + 1) + '">' + months[i] + '</option>');
}
for(y=2000; y<= 2023;y++) {
$('#selectYear').append('<option value="' + y + '">' + y + '</option>');
}
$('#selectMonth').on('change', function() {
appendHidden('form', 'courses', 'on');
appendHidden('form', 'events', 'on');
appendHidden('form', 'date-from', begining());
appendHidden('form', 'date-from', end());
$('#selectYear').remove();
$('#selectMonth').remove();
//$('#form').submit(); Uncomment this line to submit and refresh
alert($('#form').serialize())
});
});
.hidden {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="form" action="" method="GET">
<div id="custom-select1" class="custom-select" style="width:200px;" >
<select id="selectMonth" name="month" >
</select>
</div>
<div class="custom-select" style="width:200px;">
<select id="selectYear" name="year" ></select>
</div>
</form>
add a comment |
You can use a form and submit it to refresh the page with the info, to add the extra fields you can use hidden inputs.
monthEnd = function(year, month) {
date = new Date(year, month - 1, 1);
var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);
return lastDay.getDate();
}
appendHidden = function(formId, name, value) {
$('#' + formId).append('<input type="text" name="' + name + '" class="hidden" value="' + value + '" />');
}
begining = function() {
year = $('#selectYear').val();
month = $('#selectMonth').val();
return year + '-' + month + '-' + '1'
}
end = function() {
year = $('#selectYear').val();
month = $('#selectMonth').val();
return year + '-' + month + '-' + monthEnd(parseInt(year), parseInt(month));
}
$( document ).ready(function() {
months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
for(i=0; i< months.length; i++) {
$('#selectMonth').append('<option value="' + (i + 1) + '">' + months[i] + '</option>');
}
for(y=2000; y<= 2023;y++) {
$('#selectYear').append('<option value="' + y + '">' + y + '</option>');
}
$('#selectMonth').on('change', function() {
appendHidden('form', 'courses', 'on');
appendHidden('form', 'events', 'on');
appendHidden('form', 'date-from', begining());
appendHidden('form', 'date-from', end());
$('#selectYear').remove();
$('#selectMonth').remove();
//$('#form').submit(); Uncomment this line to submit and refresh
alert($('#form').serialize())
});
});
.hidden {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="form" action="" method="GET">
<div id="custom-select1" class="custom-select" style="width:200px;" >
<select id="selectMonth" name="month" >
</select>
</div>
<div class="custom-select" style="width:200px;">
<select id="selectYear" name="year" ></select>
</div>
</form>
add a comment |
You can use a form and submit it to refresh the page with the info, to add the extra fields you can use hidden inputs.
monthEnd = function(year, month) {
date = new Date(year, month - 1, 1);
var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);
return lastDay.getDate();
}
appendHidden = function(formId, name, value) {
$('#' + formId).append('<input type="text" name="' + name + '" class="hidden" value="' + value + '" />');
}
begining = function() {
year = $('#selectYear').val();
month = $('#selectMonth').val();
return year + '-' + month + '-' + '1'
}
end = function() {
year = $('#selectYear').val();
month = $('#selectMonth').val();
return year + '-' + month + '-' + monthEnd(parseInt(year), parseInt(month));
}
$( document ).ready(function() {
months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
for(i=0; i< months.length; i++) {
$('#selectMonth').append('<option value="' + (i + 1) + '">' + months[i] + '</option>');
}
for(y=2000; y<= 2023;y++) {
$('#selectYear').append('<option value="' + y + '">' + y + '</option>');
}
$('#selectMonth').on('change', function() {
appendHidden('form', 'courses', 'on');
appendHidden('form', 'events', 'on');
appendHidden('form', 'date-from', begining());
appendHidden('form', 'date-from', end());
$('#selectYear').remove();
$('#selectMonth').remove();
//$('#form').submit(); Uncomment this line to submit and refresh
alert($('#form').serialize())
});
});
.hidden {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="form" action="" method="GET">
<div id="custom-select1" class="custom-select" style="width:200px;" >
<select id="selectMonth" name="month" >
</select>
</div>
<div class="custom-select" style="width:200px;">
<select id="selectYear" name="year" ></select>
</div>
</form>
You can use a form and submit it to refresh the page with the info, to add the extra fields you can use hidden inputs.
monthEnd = function(year, month) {
date = new Date(year, month - 1, 1);
var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);
return lastDay.getDate();
}
appendHidden = function(formId, name, value) {
$('#' + formId).append('<input type="text" name="' + name + '" class="hidden" value="' + value + '" />');
}
begining = function() {
year = $('#selectYear').val();
month = $('#selectMonth').val();
return year + '-' + month + '-' + '1'
}
end = function() {
year = $('#selectYear').val();
month = $('#selectMonth').val();
return year + '-' + month + '-' + monthEnd(parseInt(year), parseInt(month));
}
$( document ).ready(function() {
months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
for(i=0; i< months.length; i++) {
$('#selectMonth').append('<option value="' + (i + 1) + '">' + months[i] + '</option>');
}
for(y=2000; y<= 2023;y++) {
$('#selectYear').append('<option value="' + y + '">' + y + '</option>');
}
$('#selectMonth').on('change', function() {
appendHidden('form', 'courses', 'on');
appendHidden('form', 'events', 'on');
appendHidden('form', 'date-from', begining());
appendHidden('form', 'date-from', end());
$('#selectYear').remove();
$('#selectMonth').remove();
//$('#form').submit(); Uncomment this line to submit and refresh
alert($('#form').serialize())
});
});
.hidden {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="form" action="" method="GET">
<div id="custom-select1" class="custom-select" style="width:200px;" >
<select id="selectMonth" name="month" >
</select>
</div>
<div class="custom-select" style="width:200px;">
<select id="selectYear" name="year" ></select>
</div>
</form>
monthEnd = function(year, month) {
date = new Date(year, month - 1, 1);
var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);
return lastDay.getDate();
}
appendHidden = function(formId, name, value) {
$('#' + formId).append('<input type="text" name="' + name + '" class="hidden" value="' + value + '" />');
}
begining = function() {
year = $('#selectYear').val();
month = $('#selectMonth').val();
return year + '-' + month + '-' + '1'
}
end = function() {
year = $('#selectYear').val();
month = $('#selectMonth').val();
return year + '-' + month + '-' + monthEnd(parseInt(year), parseInt(month));
}
$( document ).ready(function() {
months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
for(i=0; i< months.length; i++) {
$('#selectMonth').append('<option value="' + (i + 1) + '">' + months[i] + '</option>');
}
for(y=2000; y<= 2023;y++) {
$('#selectYear').append('<option value="' + y + '">' + y + '</option>');
}
$('#selectMonth').on('change', function() {
appendHidden('form', 'courses', 'on');
appendHidden('form', 'events', 'on');
appendHidden('form', 'date-from', begining());
appendHidden('form', 'date-from', end());
$('#selectYear').remove();
$('#selectMonth').remove();
//$('#form').submit(); Uncomment this line to submit and refresh
alert($('#form').serialize())
});
});
.hidden {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="form" action="" method="GET">
<div id="custom-select1" class="custom-select" style="width:200px;" >
<select id="selectMonth" name="month" >
</select>
</div>
<div class="custom-select" style="width:200px;">
<select id="selectYear" name="year" ></select>
</div>
</form>
monthEnd = function(year, month) {
date = new Date(year, month - 1, 1);
var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);
return lastDay.getDate();
}
appendHidden = function(formId, name, value) {
$('#' + formId).append('<input type="text" name="' + name + '" class="hidden" value="' + value + '" />');
}
begining = function() {
year = $('#selectYear').val();
month = $('#selectMonth').val();
return year + '-' + month + '-' + '1'
}
end = function() {
year = $('#selectYear').val();
month = $('#selectMonth').val();
return year + '-' + month + '-' + monthEnd(parseInt(year), parseInt(month));
}
$( document ).ready(function() {
months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
for(i=0; i< months.length; i++) {
$('#selectMonth').append('<option value="' + (i + 1) + '">' + months[i] + '</option>');
}
for(y=2000; y<= 2023;y++) {
$('#selectYear').append('<option value="' + y + '">' + y + '</option>');
}
$('#selectMonth').on('change', function() {
appendHidden('form', 'courses', 'on');
appendHidden('form', 'events', 'on');
appendHidden('form', 'date-from', begining());
appendHidden('form', 'date-from', end());
$('#selectYear').remove();
$('#selectMonth').remove();
//$('#form').submit(); Uncomment this line to submit and refresh
alert($('#form').serialize())
});
});
.hidden {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="form" action="" method="GET">
<div id="custom-select1" class="custom-select" style="width:200px;" >
<select id="selectMonth" name="month" >
</select>
</div>
<div class="custom-select" style="width:200px;">
<select id="selectYear" name="year" ></select>
</div>
</form>
edited Nov 26 '18 at 14:21
answered Nov 26 '18 at 14:14
vladwoguervladwoguer
3181310
3181310
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53480727%2fjavascript-refresh-same-page-with-query-string-from-selects%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Is the goal to not catch the event with javascript and then do the redirect? What if the user choses month and wants to change year after? Why not make it a simple form with a submit button and method GET if you don't want to catch the event and read the data?
– Patrick
Nov 26 '18 at 12:13
@Patrick because the big idea is to create a calendar which will be filtered with the selected values of these selects. So I don't want to add a button, but if it's not possible then I will use one
– dvn22
Nov 26 '18 at 12:16
So what you want to do is catch the change of the select boxes, see if the user has selected any values and then redirect the user depending on values chosen. If you don't want to build javascript separately you would have to check the value of "year" in the onchange attribute.
– Patrick
Nov 26 '18 at 12:23
@Patrick ok I think I got it... So I will have to use 2 onchange (one for each select) and check if there is a value selected in the other and pass both values to the query string. right?
– dvn22
Nov 26 '18 at 12:27