0

プロトタイプを使用して正常に動作するJavascriptの機能があります。この関数は、別のフィールドの選択に基づいて選択フィールドを動的に変更するために使用されます。

   var sizes_286 = new Array();
        sizes_286.push(new Array(536, 'Pequeno', 1661));
        sizes_286.push(new Array(536, 'Médio', 1662));
        sizes_286.push(new Array(536, 'Grande', 1663));
        sizes_286.push(new Array(536, 'ExtGrande', 1664));

   function varianteSelected_286(){
      var_id = $('variante_286').getValue();
      options = $('tamanho_286').options;
      options.length = 1;
      sizes_286.each(function(size){
        if (size[0] == var_id){
            options[options.length] = new Option(size[1], size[2]);
        }
    });
}


document.observe('dom:loaded', function(){
    $('variante_286').observe('change', varianteSelected_286);
});

問題は、自分のプロジェクトで jQuery を使い始めてから、この関数が機能しなくなったことです。jQuery (1.3.2) とプロトタイプ (1.6.1) を使用しています。

  • 古い関数の jquery バージョンを作成するにはどうすればよいですか? また
  • jqueryがロードされた後も動作させるにはどうすればよいですか?
  • 同じ機能の短くてエレガントなバージョンはありますか?
4

4 に答える 4

5

Jquery の $ 関数は、protoype と同じように問題が発生することがあります。そのような場合、Jquery の $ 関数が Prototype の $ 関数と衝突しないように関数を呼び出します。

関数は jquery.noConflict() です

リンクを参照してください: http://docs.jquery.com/Core/jQuery.noConflict

http://docs.jquery.com/Using_jQuery_with_Other_Libraries

于 2009-11-15T17:32:18.047 に答える
4

もし私があなたなら、両方のフレームワークの使用を避けようとします。次のように、jQueryで実行します。

<script type="text/javascript">
    var sizes_286 = [
        {id: 536, name: 'Pequeno', size: 1661},
        {id: 536, name: 'Médio', size: 1662},
        {id: 536, name: 'Grande', size: 1663},
        {id: 536, name: 'ExtGrande', size: 1664}
    ];

    $(document).ready(function(){
        $('#variante_286').change(function(){
            var var_id = $(this).val();
            var select = $('#tamanho_286');

            var options = '';
            $.each(sizes_286, function(i, n){
                if (n.id == var_id) {
                    options += '<option value="' + n.size + '">' + n.name + '</option>';
                }
            });

            select.html(options);
        });
    });
</script>
于 2009-11-15T17:48:52.067 に答える
2

jqueryとprototypeを一緒に走らせる方法については初心者の方が正しいと思いますが、それだけでいいのであれば、関数をjqueryに書き直して、両方のフレームワークを並行して走らせる必要をなくしたほうがいいと思います。以下は機能するはずです(配列宣言はそのままにしておきます):

function varianteSelected_286() {
  var_id = $(this).val();
  options = $('#tamanho_286')[0].options;
  options.length = 1;
  for(var i = 0; i < sizes_286.length; i++) {
     var size = sizes_286[i];
     if (size[0] == var_id) {
        options[options.length] = new Option(size[1], size[2]);
     }
  }

$(document).ready(function() {
   $('#variante_286').change(varianteSelected_286);
});
于 2009-11-15T17:36:37.603 に答える
0

jQueryを使用するには、関数スコープを作成する必要があります。$おそらく、Prototypeをデフォルトのままにしておくことができます$

jQueryコード:

(function($) {
    $('body').hide()
})(jQuery.noConflict());
于 2009-11-15T17:52:45.413 に答える