【问题标题】:Combining 2 jquery scripts to work together结合2个jquery脚本一起工作
【发布时间】:2011-02-13 10:47:08
【问题描述】:

我有这 2 个脚本,问题是只有在 #hotel 状态发生更改时才会调用函数检查。 我怎样才能让功能检查运行并且在#hotel 没有改变的情况下。

var hotelMap = {hotel_a:15,hotel_b:5,hotel_c:10}; //Edw mporeis na allazeis 发布期间 gia kathe ksenodoxeio $(函数(){ $('#hotel').change(function() { var selectVal = $('#hotel :selected').val(); $("#from, #to").datepicker("option", "minDate", hotelMap[selectVal]); }); var dates = $('#from, #to').datepicker({ 默认日期:“+1w”, 更改月份:真, dateFormat: 'yy-m-d', minDate: 15,//Episis edw prepei na mpainei to release period tou prwtou stoixeiou sth lista numberOfMonths:3, onSelect:函数(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); } }); }); $(文档).ready(检查); 函数检查(){ $('#from, #to, #hotel').bind('change', update); $('#wait').show(); } 函数更新(){ 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); } 功能显示(可用){ $('#wait').hide(); $('#availability').html(avail); }

【问题讨论】:

  • #hotel 输入没有改变时,您如何决定何时运行check() 函数?是提交还是有更新按钮?
  • 这是我要合并的两个脚本。 Hotel 是一个选择框,它影响两个输入框中的值(to,from) 第二个脚本只要两个输入框有值,我就将这些值传递给 php 文档并返回一些 html。我希望第二个脚本从第一个脚本独立运行。现在第二个脚本仅在#hotel 的状态发生变化时运行。谢谢!
  • 这里可以看到问题jsfiddle.net/nNFMX

标签: javascript jquery scripting


【解决方案1】:

将第二个文件中的函数移出准备好的文档(在窗口级别)。目前,它们仅适用于文档就绪事件。

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

出于性能原因,最好尝试将此代码放入一个文件中。如果这是可能的,那么您可以将这些函数与代码放在一个文档中。准备就绪。这可能是最好的解决方案。

【讨论】:

  • 你的意思是这样的吗?(我编辑了问题)我现在如何执行功能检查?
【解决方案2】:

您可以使用 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);
 });
})

【讨论】:

  • 这是我的问题! Check() 仅在 $('#hotel').change() 我希望 check() 独立运行时执行。
猜你喜欢
  • 1970-01-01
  • 2022-09-24
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
相关资源
最近更新 更多