2010-04-28 64 views
0

我有这2个脚本,问题是仅当#hotel状态改变时才调用函数检查。 如何使功能检查运行,并在#hotel的情况下不会更改。结合2个jQuery脚本一起工作

 
var hotelMap = { hotel_a: 15, hotel_b: 5, hotel_c: 10 }; //Edw mporeis na allazeis to release period gia kathe ksenodoxeio 
$(function() { 
    $('#hotel').change(function() { 
    var selectVal = $('#hotel :selected').val(); 
    $("#from, #to").datepicker("option", "minDate", hotelMap[selectVal]); 
    }); 
     var dates = $('#from, #to').datepicker({ 
      defaultDate: "+1w", 
      changeMonth: true, 
      dateFormat: 'yy-m-d', 
      minDate: 15,//Episis edw prepei na mpainei to release period tou prwtou stoixeiou sth lista 
      numberOfMonths: 3, 
      onSelect: function(selectedDate) { 
       var option = this.id == "from" ? "minDate" : "maxDate"; 
       var instance = $(this).data("datepicker"); 
       var date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, selectedDate, instance.settings); 
       dates.not(this).datepicker("option", option, date); 
      } 
     }); 
    }); 
 
$(document).ready(check); 
      function check(){ 
       $('#from, #to, #hotel').bind('change', update); 
       $('#wait').show(); 
      } 
      function update(){ 
       var from=$('#from').attr('value'); 
       var to=$('#to').attr('value'); 
       var hotel=$('#hotel').attr('value'); 
       $.get('get_availability.php', {from: from, to:to, hotel:hotel}, show); 
      } 
      function show(avail){ 
       $('#wait').hide(); 
       $('#availability').html(avail); 
      } 
+0

你是如何决定何时运行'检查()'函数时'#hotel'输入没有变化?它是否提交或您有更新按钮? – Mottie 2010-04-28 17:09:04

+0

这些是我想合并的两个脚本。 酒店是一个选择框,它影响两个输入框中的值(从,到) 第二个脚本,尽快两个输入框有值我将这些值传递给一个PHP文档并返回一些HTML。 我想第二个脚本从第一个脚本独立运行。 现在,第二个脚本只在#hotel状态更改时才运行。 谢谢! – Nikos 2010-04-28 17:17:56

+0

在这里你可以看到问题http://jsfiddle.net/nNFMX/ – Nikos 2010-04-28 17:32:27

回答

0

您可以使用jQuery的trigger事件。因此,在你的代码的某个地方,你可以补充一点:

$('#hotel').trigger('change'); 

编辑:

我更新了demo ...我添加了名为“更新”的功能变化和内内一个新的触发事件日期选择器功能。然后,我将check()函数更改为绑定到更新和模糊事件(出于某种原因,日期选取器窗口中的模糊效果更好)。

这里是我结束了代码:

var hotelMap = { hotel_a: 15, hotel_b: 6, hotel_c: 10 }; 
$(function() { 
$('#hotel').change(function() { 
    // assign the value to a variable, so you can test to see if it is working 
    var selectVal = $('#hotel :selected').val(); 
    $("#from, #to").datepicker("option", "minDate", hotelMap[selectVal]); 
    $(this).trigger('update'); 
}); 

var dates = $('#from, #to').datepicker({ 
    defaultDate: "+1w", 
    changeMonth: true, 
    dateFormat: 'yy-m-d', 
    minDate: 10, 
    numberOfMonths: 1, 
    onSelect: function(selectedDate) { 
      var option = this.id == "from" ? "minDate" : "maxDate"; 
      var instance = $(this).data("datepicker"); 
      var date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, selectedDate, instance.settings); 
      dates.not(this).datepicker("option", option, date); 
      $(this).trigger('update'); 
      } 
}); 
}); 

$(function(){ 
$('#from, #to, #hotel').bind('update blur', function(){ 
    var from=$('#from').attr('value'); 
    var to=$('#to').attr('value'); 
    var hotel=$('#hotel').attr('value'); 
    $('#availability').html(hotel + ' : ' + from + ' -> ' + to); 
}); 
}) 
+0

这是我的问题! Check()仅在$('#hotel')。change() 执行时才需要check()独立运行。 – Nikos 2010-04-28 17:10:33

+0

我已经更新了我的答案和你的演示(http://jsfiddle.net/nNFMX/1/) – Mottie 2010-04-28 17:59:22

+0

我不知道如何谢谢你!正是我想要的! 非常感谢! :) – Nikos 2010-04-28 18:08:42

1

移动功能,在第二文件出该文档准备就绪(在窗口水平)的。目前他们仅限于准备文档事件。

然后,你可以从任何地方调用函数(尽管你可能想把它们放在一个闭包中)。当函数首先被评估时,文件的加载顺序无关紧要。

出于性能方面的考虑,尽量将这段代码放到一个文件中。如果这是可能的,那么你可以把这些函数和代码一起放在一个document.ready中。这可能是最好的解决方案。

+0

你的意思是这样的吗?(我编辑了这个问题) 我该如何执行函数检查? – Nikos 2010-04-28 16:59:19