如何将脚本从Prototype转换为JQuery?

时间:2012-02-14 00:56:31

标签: jquery internet-explorer prototypejs stack-overflow

我正在研究一个继承的未完成的应用程序,它正在使用一些原型功能进行ajax调用,然后我将JQuery用于其他目的。在某个时刻,我有一个不兼容的问题,我使用jQuery $ .noConflict()选项解决了所以我保留原型的东西,因为一切都在所有浏览器上顺利运行...除了我试图在IE上测试它的那一天(第8版)。它一直显示堆栈溢出错误,应用程序没有正常响应。我确实通过添加<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>来改变标题以防万一,但经过一些研究后,似乎问题是由IE对原型库的不当处理引起的。所以我决定将所有内容都切换到Jquery。使用原型的唯一剩余代码如下:

function ajaxAll() {
$('pro_search_form').onsubmit = function () {
    initornot();
    inline_results();
    putmks();
    return false;
}
}

function initornot() {
var $elem = $('conteneur');
if($elem.getStyle('display') == 'none') { setTimeout("init();", 77); }
else init();
}

function inline_results() {
new Ajax.Updater ('pro_description_div', base_url+'main/ajaxsearch', 
{
method:'post', 
postBody:'magasin=true&ltype='+$F('ltype')+'&lieu='+$F('lieu')+'&keywords='+$F('keywords')
});
new Effect.Appear('conteneur', {duration: 2.0});
}

function putmks()
{
var url = base_url+'main/prosearch';
var myAjax = new Ajax.Request(
  url,
  {
    method: 'post',
postBody:'magasin=true&ltype='+$F('ltype')+'&lieu='+$F('lieu')+'&keywords='+$F('keywords')
  });
}

有关如何转换它的任何想法,以便我可以使用JQuery语法获得相同的行为吗?

基本上第一个函数ajaxAll()捕获一个表单的提交动作(pro_search_form)然后调用函数inline_results()来使用post方法为ajax调用和putmks()函数更新一个带有出现效果的div在发送相同的后期数据参数之后,它基本上会评估控制器在url'main / prosearch'处生成的返回的javascript内容(此功能是最关键的部分,因为它利用原型能力自动评估任何javascript,只要它有正确的标题文本/ javascript)。 第三个函数initornot()只是在执行操作之前检查div的display属性。

N.B:使用的Prototype版本是1.5.0,Jquery是1.7.1

请帮忙

1 个答案:

答案 0 :(得分:1)

是的,我终于完成了以下代码改进了一点:

$(document).ready(function(){

$("#pro_search_form").submit(function(e) {

    allResults();
e.preventDefault();

 });

function allResults() {

$.post(base_url+"main/ajaxsearch", {'magasin':true, 'ltype':$("#ltype").val(), 'lieu':$("#lieu").val(), 'keywords':$("#keywords").val()}, function(results){
    $("#pro_description_div").html(results);
    $("#conteneur").fadeIn("slow");
});

var elem = $("#conteneur").css("display");
if (elem == 'none') { setTimeout("init()", 84); }
else {init();}

$.post(base_url+"main/prosearch", {'magasin':true, 'ltype':$("#ltype").val(), 'lieu':$("#lieu").val(), 'keywords':$("#keywords").val()}, function(results){
    val(results);
});
  }

})

我知道,我正在回答我自己的问题,但我只想将解决方案提供给其他人,以防他们遇到我的问题。

感谢prodigitalson的建议;)