1

当我单步执行点击事件代码时,我看到了我期望的确切行为,将 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 选项推迟四分之一秒,问题就解决了,但这似乎太粗糙了。

4

0 回答 0