使用 jQuery 按名称属性获取选择值
Get select value by name attribute using jQuery
我正在尝试将菜单中的选定值获取到国家/地区变量中,但不断收到错误:未定义无参数构造函数。
更新客户端函数通过单击按钮保存来调用。
我正在使用 parent() 和 find() 函数来获取该控件,但我想我以错误的方式使用它们。
这是我的脚本:
function UpdateClient() {
var ar = $(this).parent().parent().parent().find('.clientIdValue').val();
var name = $(this).parent().parent().parent().find($('input[name=cname]')).val();
var address = $(this).parent().parent().parent().find($('input[name=caddress]')).val();
var zip = $(this).parent().parent().parent().find($('input[name=czip]')).val();
var city = $(this).parent().parent().parent().find($('input[name=ccity]')).val();
var country = $(this).parent().parent().parent().find($('select[name=ccountries] option:selected').text());
$.ajax({
type: "POST",
url: 'clients.aspx/UpdateClient',
data: JSON.stringify({ "ID": ar, "ClientName": name, "Address": address, "ZipCode": zip, "city": city, "Country": country}),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnSuccessUpdate,
error: OnErrorUpdate,
});
function OnSuccessUpdate(data) {
window.location.reload();
}
function OnErrorUpdate(result) {
console.log(result);
}
}
这是我在aspx页面上的HTML:
<asp:Repeater ID="clientRepeat" runat="server">
<ItemTemplate>
<div class="item">
<div class="heading">
<span>
<asp:Label runat="server" ID="TeamMemberName" Text='<%#Eval("ClientName")%>'></asp:Label></span>
<i>+</i>
</div>
<div class="details">
<input type="hidden" name="clientID" class="clientIdValue" value="<%#Eval("ClientID")%>" />
<ul class="form">
<li>
<label>Client name:</label>
<input type="text" class="in-text" name="cname" value="<%#Eval("ClientName") %>" />
</li>
<li>
<label>Zip/Postal code:</label>
<input type="text" class="in-text" name="czip" value="<%#Eval("ZipCode") %>" />
</li>
</ul>
<ul class="form">
<li>
<label>Address:</label>
<input type="text" class="in-text" name="caddress" value="<%#Eval("Address") %>" />
</li>
<li>
<label>Country:</label>
<select name="ccountries">
<option value="AF">Afghanistan</option>
<option value="AX">Aland Islands</option>
<option value="AL">Albania</option>
<option value="DZ">Algeria</option>
<option value="AS">American Samoa</option>
<option value="AD">Andorra</option>
<option value="AO">Angola</option>
<option value="AI">Anguilla</option>
<option value="AQ">Antarctica</option>
<option value="AG">Antigua and Barbuda</option>
<--...And all the others...-->
</select>
</li>
</ul>
<ul class="form last">
<li>
<label>City:</label>
<input type="text" class="in-text" name="ccity" value="<%#Eval("City") %>" />
</li>
</ul>
<div class="buttons">
<div class="inner">
<button class="btn green" onclick="UpdateClient.call(this);">Save</button>
<button class="btn red" onclick="DeleteClient.call(this);">Delete</button>
</div>
</div>
</div>
</div>
</ItemTemplate>
</asp:Repeater>
我在选择所选选项时做错了什么?这甚至是正确的方法吗?所有其他变量从文本框中获取正确的值。
要获取所选选项的值,您不需要在 jquery 中使用如此复杂的选择器,而且 .text()
不是获取值的正确函数:
$('select[name=ccountries]').val();
就够了。
更新:
我对ASP一无所知,但在您的上下文中,这将是:
var country = $(this).parent().parent().parent().find('select[name=ccountries]').val();
我会这样做:
function updateClient() {
// Store the parent in a variable to avoid calling so many functions
// var $parent = $(this).parent().parent().parent(); // This is not ideal, as your HTML markup could change
// You already have a class for this, so use it!
var $parent = $(this).parents('.item').eq(0).find('.details');
var ar = $parent.find('.clientIdValue').val();
var name = $parent.find($('input[name=cname]')).val();
var address = $parent.find($('input[name=caddress]')).val();
var zip = $parent.find($('input[name=czip]')).val();
var city = $parent.find($('input[name=ccity]')).val();
var country = $parent.find($('select[name=ccountries]').val());
$.ajax({
type: "POST",
url: 'clients.aspx/UpdateClient',
data: JSON.stringify({ "ID": ar, "ClientName": name, "Address": address, "ZipCode": zip, "city": city, "Country": country}),
contentType: "application/json; charset=utf-8",
dataType: "json"
}).then(onSuccessUpdate) // Use promise-like feature of $.ajax
.fail(onErrorUpdate); // Use promise-like feature of $.ajax
// Keep uppercase for functions that are designed to be called as constructors
function onSuccessUpdate(data) {
window.location.reload();
}
function onErrorUpdate(result) {
console.log(result);
}
}
试试这个:-
var ParentDiv = $(this).parents('.details')[0];
var country = $('select[name="ccountries"]', ParentDiv).val();
同样,您可以使用此父上下文找到其他值:-
var ar = $('.clientIdValue',ParentDiv).val();
var name=$('input[name=cname]',ParentDiv).val();
--等等。
由于它是一个repeater
控件,因此每个项目都会对不同的项目重复自己,因此我们需要找到ParentDiv
,即单击按钮的上下文,并找到同一上下文中存在的下拉值。所以在这里我们首先找到封闭的 Div,它包含该上下文中的保存按钮和下拉列表。找到 ParentDiv 后,只需在该上下文中搜索该下拉列表即可。
请注意,您需要使用select
而不是input
下拉菜单。
相关文章:
- 获取选择框的状态
- 使用jQuery获取选择列表中每个更改的值
- 在选择组中获取选择选项值以显示额外内容
- 在 jqGrid 内联编辑中获取选择的文本部分而不是值
- jQuery:如何获取选择数组中元素的索引
- 使用本机 Javascript 从 DOM 元素获取选择器字符串
- JavaScript/jQuery:获取选择功能在Firefox和Chrome中不起作用
- 获取选择框展开/用户焦点事件
- 如何使用jQuery获取选择值并传递给另一个函数
- 从谷歌文档中获取选择
- 获取选择组中选择选项的索引
- 在chrome扩展程序上下文菜单中获取选择DOM
- 获取选择选项 php 的值
- 在javascript/jquery中获取选择选项菜单
- 使用 jQuery 获取选择框 IE 的值
- AngularJS:在不修改ng模型的情况下获取选择标签
- 使用 Angular 从服务器端生成的下拉列表中获取选择属性值
- 如何获取选择值的值
- 如何在角度<选择>中获取选择选项
- 获取选择框的名称属性