我有一个form
,其中包含一些input
和select
元素以及一个提交按钮。提交表单后,我想知道选择了哪个下拉选项。
我已经通过使用jQuery更改方法实现了这一点,但是我想在表单提交中实现这一点,因为我必须进行两次AJAX调用;一个到POST
的值,另一个到GET
的值。通过使用change
来完成,它是对更改进行AJAX调用,然后单击“提交”按钮进行一次。我想仅通过提交表单来实现这一目标。
此外,由于下拉列表是在后端创建的,因此我无法在value
标签上使用<option>
属性
<form id="formId" method="get">
<div class="container">
<h4>Start Date:</h4>
<input type="text" id="startdate" name="fromdate" width="276" placeholder="dd/mm/yyyy" required onchange="checkDate()" />
<h4>End Date:</h4>
<input type="text" id="enddate" name="todate" width="276" placeholder="dd/mm/yyyy" required onchange="checkDate()" />
<h4>Outlets:</h4>
<select name="outlet" id="myselect">
<option>--------------------------------------</option>
<option>ALL</option>
</select>
<div><br>
</div>
<div>
<br>
<button id="button" class="btn btn-default" type="submit">Search</button>
</div>
</div>
</form>
<div class="loader"></div>
<div class="overlay"></div>
<div id="tbl"></div>
$(document).ready(function() {
$("#myselect").on("change", function() {
currentlyClickedOutlet = $(this).val();
$.ajax({
url: "DateWiseOlWiseSales",
method: "POST",
data: {
Outlet: currentlyClickedOutlet,
},
});
});
$("#formId").submit(function(event) {
event.preventDefault();
$.ajax({
url: "DateWiseOlWiseSales",
method: "GET",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: {
fromdate: $("#startdate").val(),
todate: $("#enddate").val(),
outlet: $("#all").val()
},
success: function(data) {
//console.log("test",tableValue);
$("#formId").hide();
let formatedData = formatData(data);
renderTable(formatedData);
$('.loader').hide();
$('.overlay').hide();
$("#export").show();
}
});
答案 0 :(得分:2)
您需要为<option>
标签赋予value
属性,并将其设置为单击“提交”时要记录的内容。
然后,您可以在表单上使用.submit()
方法来侦听提交事件,并使用e.preventDefault()
阻止表单采取默认操作并提交。然后,您可以使用以下方法获取所选的下拉项:
$("#myselect").val();
然后您可以注销此值以在控制台中查看它。
请参见以下示例:
$("#formId").submit(function(e) {
e.preventDefault(); // Stop the form from submitting
const dp_value = $("#myselect").val();
console.log(dp_value);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<form id="formId" method="get">
<div class="container">
<h4>Start Date:</h4>
<input type="text" id="startdate" name="fromdate" width="276" placeholder="dd/mm/yyyy" required />
<h4>End Date:</h4>
<input type="text" id="enddate" name="todate" width="276" placeholder="dd/mm/yyyy" required />
<h4>Outlets:</h4>
<select name="outlet" id="myselect">
<option value="none">--------------------------------------</option>
<option value="all">ALL</option>
</select>
<div><br>
</div>
<div>
<br>
<button id="button" class="btn btn-default" type="submit">Search</button>
</div>
</div>
</form>
但是,如果您打算使用 ajax POST
所有数据,建议您使用.serializeArray()
将所有表单输入转换为数组。然后,使用此数组,您可以使用.reduce
将其转换为与通过Submit POST方法接收的对象相同的对象:
$("#formId").submit(function(e) {
e.preventDefault(); // Stop the form from submitting
const data = $(this).serializeArray();
const post_data = data.reduce((acc, {name, value}) => ({...acc, [name]: value}), {});
console.log(post_data);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<form id="formId" method="get">
<div class="container">
<h4>Start Date:</h4>
<input type="text" id="startdate" name="fromdate" width="276" placeholder="dd/mm/yyyy" required />
<h4>End Date:</h4>
<input type="text" id="enddate" name="todate" width="276" placeholder="dd/mm/yyyy" required />
<h4>Outlets:</h4>
<select name="outlet" id="myselect">
<option value="none">--------------------------------------</option>
<option value="all">ALL</option>
</select>
<div><br>
</div>
<div>
<br>
<button id="button" class="btn btn-default" type="submit">Search</button>
</div>
</div>
</form>
如果不能使用value
属性,建议您使用.find(':selected')
获取选择的option
,然后使用.textContent
获取{{1 }}:
option
$("#formId").submit(function(e) {
e.preventDefault(); // Stop the form from submitting
const dp_value = $("#myselect").find(":selected")[0].textContent;
console.log(dp_value);
});
答案 1 :(得分:1)
只需添加以下代码行:
console.log(document.getElementById("mySelect").value);
或者,如果您更喜欢使用jQuery:
console.log($("#mySelect").val());
它将选择元素(选定选项)的值记录到控制台。
答案 2 :(得分:0)
您可以通过访问表单提交中的选定选项值来执行此操作。 试试这个:
$("#formId").submit(function(event) {
var value = $("#myselect option:selected").val();
..... // your code goes here
}
答案 3 :(得分:0)
您可以使用下面的代码段获取选定的选项。
$('select').change(function(){
var selectedOption = $(this).children("option:selected").val();
})
否则,您可以像$('select').val();
一样进行操作,但是请确保您的选项具有值。
已编辑:
如果您具有值数组var arr = ["option1","option2","option3"]
,则可以将选项附加到select
for(let i=0; i< arr.length;i++){
$('select').append('<option value="'+arr[i]+'"></option>');
}
在这里,您还将数组中的数据分配为选项的值。试试这个。