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 和原型一起运行是正确的,但如果这就是你所需要的,我认为你最好将你的函数重写为 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 回答