2013-03-24 106 views
0

我会开始说我除了编辑和查找脚本教程之外,几乎没有任何JavaScript经验。我一直在我的网站上使用一个小留言箱脚本。由于添加了新的插件和脚本,我发现了一个问题。无法让jQuery.noConflict正常工作

“吼吼箱”在一个文本文件中存储大约10-15行文本,显示它们并随时更新(ajax样式)并在15之后删除。简单的小脚本。

现在吼吼箱不再加载文本,只是显示空白。我试图利用jQuery.noConflict();选项,但无济于事。它会加载盒子,但是当提交时(发布数据)(不涉及SQL)没有任何反应。如果我刷新,但它会显示在框中。所以我知道它与现场传递数据有关。

这里是脚本(不是大)

<script type="text/javascript"> 
    var count = 0; 
    var files = 'application/widgets/nipunashoutbox/demos/jquery-shoutbox/'; 
    var lastTime = 0; 

    function prepare(response) { 
     var d = new Date(); 
     count++; 
     d.setTime(response.time*1000); 
     var mytime = d.getHours()+':'+d.getMinutes(); 
     var string = '<div class="shoutbox-list" id="list-'+count+'">' 
      + '<span class="shoutbox-list-time">'+mytime+'</span>' 
      + '<span class="shoutbox-list-nick">'+response.nickname+':</span>' 
      + '<span class="shoutbox-list-message">'+response.message+'</span>' 
      +'</div>'; 

     return string; 
    } 

    function success(response, status) { 
     if(status == 'success') { 
     lastTime = response.time; 
     $('#daddy-shoutbox-response').html('<img src="'+files+'images/accept.png" />'); 
     $('#daddy-shoutbox-list').prepend(prepare(response)); 
     $('input[@name=message]').attr('value', '').focus(); 
     $('#list-'+count).fadeIn('slow'); 
     timeoutID = setTimeout(refresh, 3000); 
     } 
    } 

    function validate(formData, jqForm, options) { 
     for (var i=0; i < formData.length; i++) { 
      if (!formData[i].value) { 
       alert('Please fill in all the fields'); 
       $('input[@name='+formData[i].name+']').css('background', 'red'); 
       return false; 
      } 
     } 
     $('#daddy-shoutbox-response').html('<img src="'+files+'images/loader.gif" />'); 
     clearTimeout(timeoutID); 
    } 

    function refresh() { 
     $.getJSON(files+"daddy-shoutbox.php?action=view&time="+lastTime, function(json) { 
     if(json.length) { 
      for(i=0; i < json.length; i++) { 
      $('#daddy-shoutbox-list').prepend(prepare(json[i])); 
      $('#list-' + count).fadeIn('slow'); 
      } 
      var j = i-1; 
      lastTime = json[j].time; 
     } 
     //alert(lastTime); 
     }); 
     timeoutID = setTimeout(refresh, 3000); 
    } 

    // wait for the DOM to be loaded 
    $(document).ready(function() { 
     var options = { 
      dataType:  'json', 
      beforeSubmit: validate, 
      success:  success 
     }; 
     $('#daddy-shoutbox-form').ajaxForm(options); 
     timeoutID = setTimeout(refresh, 100); 
    }); 

我试图在检查出多个网站(包括计算器讨论)后做什么添加片断noConflict.jQuery() ;在第一个脚本行之后。

然后慢慢用jQuery替换每个$,或者在将其分配给jQuery之后替换其他变量。我已经得到的最接近的是它会冻结加载更新,这或将推出一个新的页面呼应:

{"response":"Good work","nickname":"myusername","message":".","time":1364101631} 

目前正在寻求帮助,因为我很想有这个工作了。希望我已经能够解释,如果不是我道歉,请让我知道我应该包括什么。感谢您阅读本文的时间,并感谢您的支持。

编辑

我道歉,我忘了,包括脚本被称为在标题:

<script type="text/javascript" src="application/widgets/nipunashoutbox/js/jquery.js"></script> 
    <script type="text/javascript" src="application/widgets/nipunashoutbox/js/jquery.form.js"></script> 

回答

1

您需要设置jQuery.noConflict();等于一个变量。从那里你可以取代它。凡曾经你的聊天框是叫你可以这样做:

var j = jQuery.noConflict(); 
j(document).ready(function() { 
    console.log('jQuery is loaded'); // lets you know jQuery has loaded 
} 

所以你的情况:

<script type="text/javascript"> 
    var j = jQuery.noConflict(); 
    var count = 0; 
    var files = 'application/widgets/nipunashoutbox/demos/jquery-shoutbox/'; 
    // omitting some code... 
    function success(response, status) { 
     if(status == 'success') { 
      lastTime = response.time; 
      j('#daddy-shoutbox-response').html('<img src="'+files+'images/accept.png" />'); 
      j('#daddy-shoutbox-list').prepend(prepare(response)); 
      j('input[@name=message]').attr('value', '').focus(); 
      j('#list-'+count).fadeIn('slow'); 
      timeoutID = setTimeout(refresh, 3000); 
     } 
    } 

    // omitting more code... 
</script> 

您需要使用我上面介绍的方法$每个实例,以取代以j。 希望这有助于! Here is a working demo!

+0

嗨,感谢您的回复,我试着尝试一下您的方法,并在实施后出于某种原因,聊天框不再显示消息。如果您输入了任何内容并点击提交,当然会加载一个新的页面,以及您输入的文本(全部在{}的内容)中回显“成功”功能。 我在Firefox中检出了错误控制台,但我得到一个 “TypeError:j不是一个函数”,并且它在错误列表上每秒都会重复一次。 我检查了它指的代码 j('#daddy-shoutbox-list')。prepend(准备(json [i]));' – user2203886 2013-03-24 18:10:47

+0

再次查看脚本后,我注意到在某个点j被称为另一个函数的变量。所以我把“j”改为“m”,现在聊天加载起来。现在唯一的问题是,当我点击提交时,只有加载栏坐在那里没有任何反应。 如果我点击刷新,虽然有新的回应。任何建议,我应该看看为什么它无法完全处理刷新?再次,我非常感谢你的帮助。 – user2203886 2013-03-24 18:27:04

+0

编辑 我能够捕捉此在错误控制台 '代码时间戳:2013年3月24日上午11点31分37秒 错误:错误:语法错误,不能识别的表达式:输入[@名称=邮件] 源文件:/application/modules/Photoviewer/externals/scripts/jquery-1.9.0.min.js?c=81 行:2' 这是否意味着我声明的变量现在搞乱了另一个脚本?如果这听起来像我至少在滚动 编辑,改变变量仍然产生相同的错误。看看引用脚本,看看是什么被调用。 – user2203886 2013-03-24 18:35:17