2010-04-28 58 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