2012-07-09 62 views
2

我有以下代码,我尝试为jQuery中的选择组合框创建on change事件处理程序,但我从来没有看到警报消息。这里有什么问题?选择组合框的OnChange事件从来没有在jQuery中触发

$(document).ready(function() { 
     var combo = $("#Supplier_Sel").combobox(); 
     $($('.ui-combobox-input')[3]).css('width', '300px'); 
     $("#toggle").click(function() { 
      $("#Supplier_Sel").toggle(); 
     }); 
     //this change event never gets fired. WHY?? 
     $("#Supplier_Sel").change("dssd",function() { 
      alert('Handler for .change() called.'); 
     }); 
    }); 

此外,我在我的页面中包含以下脚本。可能是我需要为ComboBox onchange事件添加一些其他脚本?

<script type="text/javascript" src="../jquery/jquery-1.7.2.js"></script> 
    <script type="text/javascript" src="../jquery/ui/jquery-ui-1.8.21.custom.js"></script> 
    <script type="text/javascript" src="../jquery/jquery.scrollIntoView.min.js"></script> 
+0

嗯....为什么'dssd'?另外,'$($('。ui-combobox-input')[3])'??? – elclanrs 2012-07-09 03:19:24

+0

因为intellisense的变更方法签名变更(资料,fn) – Sunil 2012-07-09 03:21:04

+0

是的,但是目的是什么? – elclanrs 2012-07-09 03:30:39

回答

4

这会让所有人感到惊讶。但对我来说好像火箭科学。大声笑。 要触发jQuery组合框的更改事件,您应该始终使用下面的代码。这篇文章中提到的所有方法都不会这样做。 我们需要在事件调用jQuery中的combobox方法select元素时调用事件。此外,更改事件不会触发,但如果以上述方式连接,选定的事件总是触发。

 $(document).ready(function() { 
     $("#Supplier_Sel").combobox({ 
      selected: function (event, ui) { 
       alert('Handler for .change() called.'); 
      } 
     }); 
     $($('.ui-combobox-input')[3]).css('width', '300px'); 
     $("#toggle").click(function() { 
      $("#Supplier_Sel").toggle(); 
     }); 
    }); 

上述方法是有道理的,如果你看一下组合框控件的jQuery代码。如下所示。

select: function(event, ui) { 
       ui.item.option.selected = true; 
       //select.val(ui.item.option.value); 
       self._trigger("selected", event, { 
        item: ui.item.option 
       }); 
       } 
+0

上述方法工作得很好。 – Sunil 2012-07-09 04:30:43

+0

我很高兴我的提示把你带到了这里。 – 2012-07-09 04:33:51

+0

你说得对。 '变化'事件永远不会发生!但如果是这样,最简单的解决方案是将'change'替换为'select'。有用! – zeliboba 2013-05-21 09:50:19

0
$("#Supplier_Sel").change(function() { 
    alert('Handler for .change() called.'); 
}); 

删除"dssd"

+0

我在发布我的问题之前尝试过,并没有显示警报。 – Sunil 2012-07-09 03:22:31

+0

@Sunil - 文档就绪事件触发时是否存在'#Supplier_Sel'?如果事后生成,你将需要使用'.on()'或'.delegate()' - 除非你在回调中附加处理程序。 – ahren 2012-07-09 03:33:49

+0

如果您查看我的原始代码,我在document.ready发生后附加事件。它在事件代码之前经过验证存在。 – Sunil 2012-07-09 03:46:57

0
//Assuming Supplier_Sel is the selectbox id,this will be all you need 

     $("#Supplier_Sel").change(function() { 
      alert('Handler for .change() called.'); 
     }); 
    //or if its dynamically generated then 

$('body').delegate('#Supplier_Sel','change',function() { 
      alert('Handler for .change() called.'); 
     }); 
+0

我试过了bot,但仍然没有成功。 – Sunil 2012-07-09 03:26:37

+0

您是否尝试过两种选择? – coolguy 2012-07-09 03:27:43

+0

检查你的html,你有有效的'Supplier_Sel' ID,我的意思是检查拼写,大写 – coolguy 2012-07-09 03:28:37

0

尝试:

$('#Supplier_Sel').live('change',function(){ 
    alert('Handler for .change() called.'); 

}); 
+1

'住'贬值请参阅http://blog.jquery.com/2011/11/08/building-a-slimmer-jquery/ – coolguy 2012-07-09 03:23:53

1

我不知道是什么.combobox()方法做,但我怀疑它需要一个实际的组合框,并做了一些HTML欺骗它。所以它可能不再是一个下拉菜单,并且不会有onChange方法可用。

如果你提供了一个链接到哪个库有.combobox()方法,有人可以检查,但我很确定它会有一些跨度和文本输入元素(如jQuery UI版本)。这些没有改变方法。

+0

只是谷歌的jQuery Combobox演示并在jQuery网站上点击查看代码查看组合框样本。你可以看到这个小部件代码,在那里定义了select:函数。 – Sunil 2012-07-09 04:34:46

+0

好吧,当然。那正是我想让你去做的。 ;-)教一个人钓鱼和所有的......!很高兴你找到了解决方案。 – 2012-07-09 04:35:45

+0

你是部分正确的,但仍然是,我正在寻找的是如何挂钩事件选择更改。 – Sunil 2012-07-09 04:42:23

1

下面的代码为我工作。测试。

如果简单选择组合框,则用下面的代码更改事件触发器;

$("#mySelectCombo").on('change', function() { 
       alert("test");    
      }); 

如果基于jquery的选择组合,然后用下面的代码更改事件触发器;

$("#mySelectCombo").combobox({      
       select: function (event, ui) { 
        alert("hello"); 
       } 
      }); 
1

这为我工作:

$("#combobox_old").combobox({ 
     selected: function (event, ui) { 
      alert('Handler for .selected() called.'); 
     } 
    }); 

MURUGESAN Bakthavachal,还写了解决方案(对我来说),但我认为其他的代码不工作,因为$.widget("ui.combobox" , {...});代码有变化的事件已经一个定义所以下面的代码不起作用:

$("#mySelectCombo").on('change', function() { 
     alert("test");    
    }); 
+0

select ** ed **为我工作,而不是简单的选择,非常感谢你的答案! – Ozzyberto 2016-01-15 20:26:55