Javascript冲突ajax邮件和scriptaculous

时间:2012-05-02 22:21:59

标签: javascript

我添加了一个我在指南中找到的javascript元素。如下

$(document).ready(function ()
    {
        $('.dropdownbutton').click(function ()
        {
        $.post("send.php", $(".mycontactform").serialize(),  function (data) 
            {   
            });
        $('#success').html('Message sent!');
        $('#success').hide(2000);
    });
});

现有的javascript是

        function toggleDisplayWait(divId, imgId, durationmSec) {
        if(!$(divId).visible()) {
            move = Effect.BlindDown;
            newImage = "./img/minus.png";
        }
        else {
            move = Effect.BlindUp;
            newImage = "./img/plus.png";  
        }        
        move(divId, {duration: durationmSec / 1000.0 });
        setTimeout(function() { $(imgId).src = newImage; }, durationmSec)
    }



function BDEffect(divId, imgId)
    {
        /* new Effect.BlindDown(element, {duration:3});
        }*/

        if(!$(divId).visible()) 
            {
                move = Effect.BlindDown;
                newImage = "./img/feedbacktab_open.png";
                setTimeout(function() { $(imgId).src = newImage; }, 0)
            }
        else 
            {
                move = Effect.BlindUp;
                newImage = "./img/feedbacktab.png";
                setTimeout(function() { $(imgId).src = newImage; }, 2)
            }        
            move(divId, {duration:2});
            /*setTimeout(function() { $(imgId).src = newImage; }, 0)*/
    }
</script>

但是现在OLD代码和NEW代码都不起作用。

当我尝试使用旧脚本时,错误控制台现在报告“$(divId).visible不是函数”

1 个答案:

答案 0 :(得分:1)

旧代码看起来像是在使用Prototype框架,新代码使用的是jQuery。

当你将两者结合使用时,你需要使用jQuery的noConflict(),这样他们就不会尝试使用$变量。

首先,在包含jQuery库之后,添加如下脚本:

<script>
  jQuery.noConflict()
</script>

然后修改您的jQuery代码,如下所示:

jQuery(function ($) {
    $('.dropdownbutton').click(function() {
    $.post("send.php", $(".mycontactform").serialize(), function(data) {});
    $('#success').html('Message sent!');
    $('#success').hide(2000);
});

使用noConflict,无论您何时想要使用jQuery,都必须使用jQuery变量而不是$。但是,您仍然可以将$作为局部变量传递,并且它不会与Prototype冲突。

另请注意,我已将document.ready(function() { ... })功能更改为jQuery's shorthand versionjQuery(function() { ... })。该函数也将传递jQuery对象,为方便起见,我将其命名为$