当我单步执行点击事件代码时,我看到了我期望的确切行为,将 ddlValues 设置为正确的选定选项)但是在我的代码之后运行事件冒泡代码后,选定的选项每次都设置回第一个选项。这是页面中的所有代码,仅显示相关,因为我检查了我的其他代码没有运行,因为事件被触发。
此选择控件位于两页页面 jquery 移动样式的 page2 上。在点击事件中,最后一个事件中,注意 changepage 方法,之后我开始我的设置被覆盖。
找不到运行得足够晚以重置值的事件,因为这会解决它,因为我有我想要在全局 hdn 控件中设置的值。
<script>
$(document).ready(function () {
function GetPricing(cardid) {
var prices = $('#ddlValues');
var cardp = {};
cardp.cardid = cardid;
var datax = JSON.stringify(cardp);
$.ajax({
type: "POST",
url: "cardedit.aspx/GetPricing",
data: datax,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
prices.empty();
$.each(response.d, function (index, item) {
prices.append(new Option(item.Name, item.ID));
});
prices.selectmenu("refresh");
},
error: function () {
alert("Failed to load data");
}
});
}
function GetDetail(id) {
var cardd = {};
cardd.id = id;
var datax = JSON.stringify(cardd);
$.ajax({
type: "POST",
url: "cardedit.aspx/GetDetail",
data: datax,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
var vals = response.d;
$('#txtNumber').val(vals[0]);
$('#txtPrice').val(vals[1]);
$('#txtTrade').val(vals[2]);
$('#txtSell').val(vals[3]);
$('#txtWholesale').val(vals[4]);
},
error: function () {
alert("Failed to load data");
}
});
}
function GetDetailx(id) {
var cardd = {};
cardd.id = id;
var datax = JSON.stringify(cardd);
$.ajax({
type: "POST",
url: "cardedit.aspx/GetDetailx",
data: datax,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
var vals = response.d;
$('#txtPrice').val(vals[0]);
$('#txtTrade').val(vals[1]);
$('#txtSell').val(vals[2]);
$('#txtWholesale').val(vals[3]);
},
error: function () {
alert("Failed to load data");
}
});
}
$('#ddlCards').change(function () {
var cardid = $(this).attr('value');
GetPricing(cardid);
});
$('#ddlValues').change(function () {
var priceid = $(this).attr('value');
$('#hdnPriceid').val(priceid)
GetDetailx(priceid);
});
$('.cardxx').on('tap', function () {
var x = $(this);
var id = x.data("id");
$('#hdnCardid').val(id);
var cardid = x.data("cardid");
var priceid = x.data("priceid");
$('#hdnPriceid').val(priceid);
var pagex = $('#page2');
$.mobile.changePage(pagex);
var cards = $('#ddlCards');
cards.val(cardid);
cards.selectmenu("refresh");
GetPricing(cardid);
GetDetail(id);
var pricexs = $('#ddlValues');
pricexs.val(priceid);
pricexs.selectmenu("refresh", true);
event.stopPropagation();
});
});
</script>
运行我的代码后,我看到 jquery 和 jquerymobile 代码正在运行,但对它的理解还不够,无法理解为什么它将 ddlValues 重置为第一个选项。
如果我将 set select 选项推迟四分之一秒,问题就解决了,但这似乎太粗糙了。