selectmenu('refresh',true)

时间:2012-05-11 13:08:21

标签: javascript zend-framework jquery-mobile select-menu

我从zend框架网站获取表单并将其放在jquery mobile编写的函数中的新文件中,但是我收到此错误:

  

未捕获的异常:无法在selectmenu之前调用方法   初始化;试图调用方法'刷新'。

此文件的功能代码:

     function addItem(id) {
        $.ajax({
            url:'http://zf.darina.php.nixsolutions.com/order/index/create-order-mobile',
            dataType:"jsonp",
            data:{id_good:id},
            success:function (resp) {

                console.log(resp);
                $('.product-table').empty();

                $('.product-table').append(resp.prod);
                $('.product-table').append(resp.form);
                $('.add-order-btn').button();

                $('.mob-size').selectmenu('refresh', true);

                $('#block').page();
            }
        })
    }

5 个答案:

答案 0 :(得分:44)

首先强制初始化选择菜单:

$('.mob-size').selectmenu(); // Initializes
$('.mob-size').selectmenu('refresh', true);

或暂时使用

$('.mob-size').selectmenu().selectmenu('refresh', true);

答案 1 :(得分:3)

在我的情况下,如果我在调用'disable'方法之前没有初始化select我得到了错误,而如果我正在初始化它,select没有禁用但重复本身 - 我试图通过选择标记名称而不是CLASS或ID NAME,

$('select').selectmenu('disable');

而不是

$('.select-class-name').selectmenu('disable');

并且无需强制初始化即可使用

答案 2 :(得分:3)

您可以在自定义刷新委派功能中执行此操作:

var w = $("#yourinput");
if( w.data("mobile-selectmenu") === undefined) {
  // not initialized yet, lets do so
  w.selectmenu();
}
w.selectmenu("refresh",true);

根据enhancement resolution here

答案 3 :(得分:0)

我发现了同样的问题,但是更复杂的解决方案。当jqm包装select元素时,它会将其放在<span>元素中,该元素与select元素具有相同的类列表。我改变了对它的引用,而不是阅读:

row.find(".selectCompletion").selectmenu("disable");
现在它写着:

row.find("select.selectCompletion").selectmenu("disable");

指定jquery应该只找到与类名匹配的select元素,而不是.row中与类名匹配的所有元素,解决了这个问题。

答案 4 :(得分:0)

当我克隆现有的select元素以多次复制原始部分时,这发生在我身上。

为原始元素调用“ 刷新”工作正常,而为克隆部分调用它导致问题中出现错误

但是,调用 selectmenu()会对表单造成“破坏”,如下图所示:

说明:顶部=原始。 bottom =调用选择菜单后立即破坏了克隆的元素。

解决方案:

以下代码解决了该破坏行为的问题:

cloned_elem.find('select [name = MyClass]') .selectmenu()。selectmenu(“ destroy”)。selectmenu() ;;

这不是理想的解决方案,因为必须调用第一个selectmenu()才能调用selectmenu(“ destroy”),所以我很高兴听到更干净的解决方案。