【问题标题】:uncaught exception: cannot call methods on slider prior to initialization; attempted to call method 'disable'未捕获的异常:无法在初始化之前调用滑块上的方法;试图调用方法“禁用”
【发布时间】:2012-02-25 16:31:07
【问题描述】:

以下代码块有效:

$("#data\\[User\\]\\[notify_one_day_out\\]").val("0");
$('#data\\[User\\]\\[notify_one_day_out\\]').slider('disable');
$('#data\\[User\\]\\[notify_one_day_out\\]').slider('refresh');

$("#data\\[User\\]\\[notify_one_week_out\\]").val("0");
$('#data\\[User\\]\\[notify_one_week_out\\]').slider('disable');
$('#data\\[User\\]\\[notify_one_week_out\\]').slider('refresh');

$("#data\\[User\\]\\[notify_one_month_out\\]").val("0");
$('#data\\[User\\]\\[notify_one_month_out\\]').slider('disable');
$('#data\\[User\\]\\[notify_one_month_out\\]').slider('refresh');

$("#data\\[User\\]\\[notify_on_release_date_change\\]").val("0");
$('#data\\[User\\]\\[notify_on_release_date_change\\]').slider('disable');
$('#data\\[User\\]\\[notify_on_release_date_change\\]').slider('refresh');

$("#data\\[User\\]\\[notify_available_for_purchase\\]").val("0");
$('#data\\[User\\]\\[notify_available_for_purchase\\]').slider('disable');
$('#data\\[User\\]\\[notify_available_for_purchase\\]').slider('refresh');

当我尝试将上面的内容替换为以下内容以压缩代码时:

      $('[id^="data"]').val('0');
            $('[id^="data"]').slider('disable');
            $('[id^="data"]').slider('refresh'); 

我明白了:

uncaught exception: cannot call methods on slider prior to initialization; attempted to call method 'disable'

【问题讨论】:

  • 第二种方法是否选择相同的元素?
  • 据我所知是的。我的意思是它应该只选择所有以“数据”开头的表单元素
  • 如果您重新排列调用以使其使用与第二种方法相同的顺序(即首先所有.val(0) 调用等),第一种方法是否有效?

标签: javascript jquery jquery-mobile


【解决方案1】:

最近我遇到了非常相似的问题并更换了

$('.sth').slider('disable');

与:

$('.sth').attr('disabled', true);

帮助。也许这值得一试。

【讨论】:

    【解决方案2】:

    我在一个正在处理的项目中遇到了同样的错误,解决方法是在使用任何方法之前初始化滑块,正如控制台错误几乎明确指出的那样。

    查看滑块上的 jQuery Mobile 文档页面。 http://jquerymobile.com/test/docs/forms/slider/

    选择所有的滑块,调用slider() 方法进行初始化,bug 就解决了。

    // Select all my inputs with the slider class, and initialize   
    $('.slider').slider(); 
    

    【讨论】:

      【解决方案3】:

      建议您将input 添加到您的[id^="data"]。 您可能有 id=data-something 的 div 或非滑块。

      还可以尝试将代码放入每个带有滑块的页面的 pageinit 事件中:

      $('#page1,#page2,.sliderpage').on('pageinit', function() {
         $('input[id^=data]').val('0').slider('disabled', true).slider('refresh'); 
      });
      

      【讨论】:

        【解决方案4】:

        我发现问题在于我在代码的早期区域中初始化了滑块,然后对 $(myfield).slider() 的引用不存在。还值得注意的是,当类用作选择器时,这不起作用。

        我使用的解决方案是定义

        window['#'+$(this).attr('id')] = $('#'+$(this).attr('id')).slider();

        以后再参考……

        window['#'+id].slider('enable');(或禁用)

        希望对某人有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-10-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多