【问题标题】:cannot call methods on slider prior to initialization attempt to call method 'value'在初始化尝试调用方法“值”之前无法调用滑块上的方法
【发布时间】:2013-06-25 00:58:00
【问题描述】:

我正在为滑块使用以下代码

Css 和 Jquery:

<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"></script> 
<script type="text/javascript" src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>

ASPX:

<p>
   <label for="amount">Value:</label> 
   <input type="text" id="amount" style="border: 0; color: #f6931f; font-weight: bold;" />%
</p> 
<div id="slider-vertical" style="height: 15px; width:800px"></div>
<script type="text/javascript">
    $(function () {
        $("#slider-vertical").slider({
            orientation: "horizantal", range: "min", min: 0, max: 100, value: 60,
            slide: function (event, ui)
            { $("#amount").val(ui.value); }
        });
        $("#amount").val($("#slider-vertical").slider("value"));
    });
</script>

我正在尝试设置滑块的值:

function UpdateSlider(PhaseInStatusReportVal) {
    $("#slider-vertical").slider("value").val(PhaseInStatusReportVal);
}

我从这样的地方调用上面的代码:

ClientScript.RegisterStartupScript(Me.GetType(), "updatetheslider", "UpdateSlider('" + BCOMSPackageValidationList(0).PhaseInStatusReport.ToString() + "')", True)

但它抛出了上述错误。

谁能帮帮我?

【问题讨论】:

  • $("#slider-vertical").slider("values", PhaseInStatusReportVal); ?
  • 我试过它抛出错误:在初始化之前无法调用滑块上的方法;试图调用方法“值”
  • 你找到根本原因了吗?

标签: jquery asp.net jquery-ui jquery-ui-slider


【解决方案1】:

您是否考虑过不同的方法。使用初始值设置隐藏字段 -> 从代码隐藏中填充值,然后执行以下操作:

$(function () {
    $("#slider-vertical").slider({
        value: $("#hiddenFieldWhatever").val(),
        // setup the rest ...
    });  
});

希望我能正确理解您的要求。

【讨论】:

  • 我已经硬编码了这个值,但它仍然会抛出同样的错误。
【解决方案2】:
var slider = $("#slider-vertical");

var a = function() {
    if(slider.slider("instance")) {
        slider.slider('value', 1);
        console.log('set value');
    } else {
        console.log('ERROR: cannot set value prior to initialization');
    }
}

var b = function() {
    slider.slider();
    console.log('initialized');
}

a();
b();
a();

【讨论】:

  • 是的,这是我检查滑块是否已在元素上初始化的唯一选项:$(element).slider("instance")
【解决方案3】:

没有答案可以解释问题。问题是您试图在加载文档之前在 DOM 元素上创建事件侦听器:

如果您的代码块应该在页面加载后立即运行,您可以将其包装在一个函数中,以便在文档加载后立即运行:

document.onload=function(){
// Your Code Here
}

如果代码块在函数内动态运行,您可以简单地将代码包装在检查中以确保文档已加载:

if (document. readyState === 'complete') {
//Your Code Here
}

【讨论】:

    【解决方案4】:

    为了设置滑块的值,您需要使用value method

    $("#slider-vertical").slider("value", PhaseInStatusReportVal);
    

    演示:Fiddle

    【讨论】:

      【解决方案5】:

      我发现,如果您使用滑块库中 ON 函数中的事件,您可以获得该值。例如:

      slider.on('slideStop', function(ev) {
          let value= ev.value; //try ev if you want to see all
          console.log(value);
      })
      

      问候

      【讨论】:

        【解决方案6】:

        所以我经常看到这种类型的东西。您可以执行以下操作之一 (AFAIK):

        var slider;
        
        $(function () { 
            var slider = $("#slider-vertical").slider({ 
                orientation: "horizantal",
                range: "min",
                min: 0,
                max: 100,
                value: 60, 
                slide: function (event, ui) { 
                    $("#amount").val(ui.value); 
                } 
            }); 
        
            $("#amount").val(slider.slider("value")); 
        });
        
        function UpdateSlider(PhaseInStatusReportVal) {
            slider.slider("value").val(PhaseInStatusReportVal);
        }
        

        $("#slider-vertical").slider().slider("value").val(PhaseInStatusReportVal);
        

        我更喜欢第一个选项。

        【讨论】:

        • 这两个选项的异常情况是否相同?
        • .slider("value") 返回值,而不是 jQuery 对象。你不能在上面调用.val()
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-03
        • 1970-01-01
        • 1970-01-01
        • 2020-12-17
        • 1970-01-01
        相关资源
        最近更新 更多