【问题标题】:JQuery Mobile: update select using javascriptJQuery Mobile:使用 javascript 更新选择
【发布时间】:2011-03-20 03:04:11
【问题描述】:

我正在尝试在 phonegap/JQM 应用程序中使用 javascript 更改选择值。 在更改其值后,我遵循了调用 .selectmenu('refresh') 的建议;它得到这个错误:

Uncaught 不能在初始化之前调用 selectmenu 上的方法;试图调用方法“刷新”

如果我删除该调用,选择上的 .val() 将会改变,但屏幕上的图形不会改变。 .selectmenu("refresh") 旨在将图形与选择的 .val() 同步。

以下是我尝试使用的两个资源: http://jquerymobile.com/demos/1.0a3/#docs/forms/plugin-eventsmethods.html http://jquerymobile.com/test/docs/forms/forms-selects.html

我是新的phonegap和JQM。

这是尝试每三秒翻转一次选择的示例代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"    "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta name="viewport" content="width=default-width; user-scalable=no" />

<meta http-equiv="Content-type" content="text/html; charset=utf-8">

<title>Demo Error</title>

<script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
<script type="text/javascript" charset="utf-8">

function onBodyLoad()
{
       document.addEventListener("deviceready",onDeviceReady,false);
       for (i=1;i<10;i++) {
          setTimeout('changeProduct()',i*3000);
       }
}
    function changeProduct()
    {
       if ($("#product").val() == 'S')
       {
          $("#product").val('M');
       }
       else
       {
          $("#product").val('S');
       }
       console.log("calling selectmenu refesh change to " + $("#product").val());
       $("#product").selectmenu('refresh', true);
    }

/* When this function is called, PhoneGap has been initialized and is ready to roll */
function onDeviceReady()
{
    // do your thing!
}

</script>
<link rel="stylesheet" href="jquery.mobile-1.0a3.css" />
<link rel="stylesheet" href="quote.css" />
<script src="jquery-1.5.min.js"></script>
<script src="jquery.mobile-1.0a3.js"></script>

</head>
<body onload="onBodyLoad()">
<div id="page1" data-role="page">
<div data-role="content">
    <div id="product-all" data-role="fieldcontain">
      <label for="product">Product:</label>
  <select data-role="slider" name="product" id="product" value="S">
    <option id="one" value="S">Single</option>
    <option id="two" value="M" selected="selected">Multi</option>
  </select>
    </div>
</div>
</div>
</body>  
</html>

【问题讨论】:

  • 我刚刚发现,如果我从 'data-role=slider' 更改为 'data-role=select',我的代码将会工作。所以现在我的问题是,如何更改/刷新滑块?

标签: cordova jquery-mobile


【解决方案1】:

我想通了:

当您想使用 javascript 更改 data-role=slider 的值时,更改值后,调用:$('#mysliderid').slider('refresh');

当您想使用 javascript 更改 data-role=select 的值时,更改值后,调用:$("#myselectid").selectmenu('refresh', true);

这可能会令人困惑,因为它们在内部都使用 select,因此可能会误导人们认为 selectmenu 对两者都适用。

【讨论】:

【解决方案2】:

对我来说,在 JQM 1.4 上,摆脱的唯一方法是: “在初始化之前无法调用选择菜单上的方法;试图调用方法‘刷新’” 是用 data-role="fieldcontain" 在我的切换器周围创建一个包装父级,然后在调用我的切换器 之前调用该元素的 .trigger("create") >.slider("刷新")

换句话说,我是从这个改变的:

<select id='policy_toggler' data-role='slider'>
  <option value="false">No</option>
  <option value="true">Yes</option>
</select>

<script>
$("#policy_toggler").selectmenu("refresh");  //rises prior-to-initialization error, nothing happens visually.
</script>

到这里:

<div class="prefparam" data-role="fieldcontain">
  <select id='policy_toggler' data-role='slider'>
    <option value="false">No</option>
    <option value="true">Sí</option>
  </select>
</div>

<script>
$(".prefparam").trigger("create");
$("#policy_toggler").slider("refresh");  //visual sync between real input element and visual ui element
</script>

另请注意,在使用 JQM1.4 时,切换器的 API 使用 .slider() 访问,而不是 .selectmenu()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 2015-02-08
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 2013-03-11
    相关资源
    最近更新 更多