2

私は jquery スライダー アドオンを使用しており、それを操作すると値が Linux ファイルに書き込まれます。

Slider は、テキスト入力ボックスを制御します。ボックスは読み取り専用なので、常にぼやけています。理解できない問題は、onchange コマンドが機能しない理由です。入力コマンドの readonly 属性を削除すると、同じ問題が発生します。

テキスト入力ボックスの値を変更してEnterキーを押すと更新されるため、JavaScript関数が機能することはわかっています。しかし、スライダーが変更されるたびに数値を更新する必要があるため、ユーザーの入力ではなくスライダーが制御するため、キーアップまたはキーダウンコマンドを使用できません。

<script type="text/javascript">

$(document).ready(function() {

    $( "#LeftRecordSlider" ).slider({

        range: "min",

        orientation: "vertical",

        value: 50,

        min: 0,

        max: 100,

        slide: function( event, ui ) {

            $( "#LeftRecordAmount" ).val( ui.value );

        }

    });

    $( "#LeftRecordAmount" ).val( $( "#LeftRecordSlider" ).slider( "value" ) );

});

</script>

<script type="text/javascript">

    function ChangeVolume(volumetype,volumelevel)
        {
            var xmlhttp;
            if (window.XMLHttpRequest)
            {//IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp=new XMLHttpRequest();
            }
            else
            {//IE6, IE5
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange=function()
            {
                if (xmlhttp.readyState==4 && xmlhttp.status==200)
                {
                document.getElementById("VolumeOutput").innerHTML=xmlhttp.responseText;
                }
            }
            xmlhttp.open("GET","ChangeVolume.php?volumetype="+volumetype+"&volumelevel="+volumelevel,true);
            xmlhttp.send();
        };



</script>


<label for="LeftRecordAmount">Left Record Volume:</label>

<input type="text" onchange="ChangeVolume('LeftRecord',this.value)" id="LeftRecordAmount" style="border:0; width:3em; color:#0080ff; font-weight:bold;" readonly/>

<div id="VolumeOutput"></div>
4

2 に答える 2

2

イベントまたはメソッドを明示的に呼び出してみてください。以下のアプローチに従ってください

$( "#LeftRecordSlider" ).slider({
    range: "min",
    orientation: "vertical",
    value: 50,
    min: 0,
    max: 100,
    slide: function(event, ui) {
        $("#LeftRecordAmount").val( ui.value );
    },
    stop : function(event, ui){
        eval($("#LeftRecordAmount").attr("onchange")); // first approach
        ChangeVolume('LeftRecord',ui.value) // second approach
    }

});

それらのいずれかを使用します。

于 2012-09-04T16:39:54.267 に答える
0

神聖な空白のバットマン うまくいけば、あなたのコードは、あなたの増加する解析時間の多くを実際に好まないことを願っています. また、jQuery ライブラリに含まれている Ajax メソッドを使用していない理由がわかりません。すでに IE6 をサポートしているのに、車輪を再発明するのはなぜですか。もう 1 つのこと Java と JavaScript は 2 つのまったく異なるものであり、同じように参照しないでください。読み取り専用テキストボックスについては、代わりに無効なプロパティを使用しない方がはるかにうまく機能します。これもより良いアプローチかもしれません。

  var control = document.getElementById("LeftRecordAmount");
  control.addEventListener("change", function(){
      //do whatever here
  }
  //vanilla javascript runs faster than jQuery you can even test with console.time() profiler and        jsperf.com
  //inline handlers are also bad here's why     

http://www.onlinetools.org/articles/unobtrusivejavascript/chapter4.html

于 2012-09-04T16:58:24.160 に答える