2010-10-21 44 views
0

这与更复杂的earlier post相关,我试图将js事件处理程序联系在一起。我在回顾我的接受者帖子后意识到,我不确定我的网站上的某个行为是如何运作的,因此我想将它作为一个新话题发布。如何更新下拉菜单?

基本上,我正在使用一个商业wordpress插件,它使用很多非常复杂的JS/AJAX代码来更新一些下拉菜单,具体取决于用户做出的选择。 例如,如果您在下拉菜单#1中选择“选项1”,则下拉菜单#2更新为'a,b & c',如果您要在下拉菜单1中选择'选项2' ,下拉菜单#2将显示'x,y & z'。

问题是我不知道该插件如何检测下拉菜单#1中的更改​​以更新下拉菜单#2中的选项。通常,有一些onClick事件可以处理这些事件,但是在清理代码之后,我找不到任何东西。

而不是在这里发布完整的代码,我认为它可能更容易指向你,以便你可以找你自己。如果有人能告诉我如何检测到下拉菜单更改以及处理更新的功能,我将非常感激。

回答

1

我认为你想要的代码被缩小,这使得它很难阅读,但'ProductOptionsMenus'函数中的f(k).changef(i).change可能是做这项工作的位(f是jqnc(),我怀疑它是jQueryNonConflict fubnction)什么K和我都部分取决于哪些变量为L,G,o和p

至于您的意见通过我尝试这个脚本: 对不起,我只得到尽可能运行此脚本:

$('#options-1 option').each(function(){ 
    $(this).parent().after('<input type="radio" name="options-1radio" value="'+$(this).val()+'" /> - '+$(this).text()+'<br />'); 
}); 
$('#options-1').after('<br />'); 
$('input[name=options-1radio]').click(function(){ 
    radioVal = $('input[name=options-1radio]:checked').val(); 
    $('#options-1').val(radioVal); 
    $('#options-1').change(); 
}); 
//$('#options-1').hide(); 

但唉我有同样的问题你它不会触发激活价格查询的开关。我得到了'太多的递归'错误,但似乎没有上面的代码运行。我不知道这是你添加的代码还是原始来源。

祝你在解决这个问题上最好。如果我有任何想法,我会发布。

+0

因此,如果我尝试用onChange或onClick事件处理程序调用此函数,我将如何处理它?这很简单吗? – Thomas 2010-10-21 10:23:29

+0

这取决于你正在尝试做什么。如果代码设置正确,并且你想要做的只是触发执行#option-1更改时执行的函数,那么应该可以执行$('#option-1')。它会告诉脚本下拉已经改变并作出相应的响应(当fdo像$('#option-1')。val('new value')时它不会改变它。真的不是你想要它做的.change();必须手动触发(无论是在脚本中或通过'手动'输入)) – BenWells 2010-10-21 10:30:10

+0

我不知道你是否看到我的其他帖子,但我试图更换掉用单选按钮使用jquery。单选按钮成功更改下拉#1中的值,但后续更改不会发生在下拉#2中...我已经使用$(“#options-1”)。当用户选择其中一个单选按钮,但下拉#2仍然没有变化。 – Thomas 2010-10-21 10:41:11

0

在解释了样本内容之后进行了编辑:我看了看似乎是目录/购物车的行为。所有的代码都被缩小了,很难阅读,但看起来他们正在使用更改函数。不管他们是否是,如果我是你,我会使用变化。你在与你玩的代码中做什么看起来像你有正确的想法。

+0

实际上,我添加了这个 - 它只是负责将一些菜单转换为单选按钮,这是一整套其他的蠕虫。我真的只是在#options- – Thomas 2010-10-21 08:06:08

0

通过使用下拉元素的通用事件“onchange”来检测更改。

的平变化可以绑定内联,例如:

<select onchange="HandleChange(this);"> 

还是使用客户端脚本能与像的attachEvent 或的addEventListener命令的约束,这取决于浏览器,我敢肯定这是 jQuery在幕后使用的是什么。

问题是:你为什么问这个?你的目标是什么?

+0

中检测到更改感兴趣,因为我无法编辑插件的HTML,所以我需要使用jQuery来引入一些表单元素而不会丢失功能。没有onchange处理程序(据我所知)。 – Thomas 2010-10-21 08:34:51

0

它在页面底部有一个带有.change标记的jquery函数,它只是通过该函数更新值。它通过那里获得了一些价值,并将其附加到较低的价值。

$(function(){ 
    $("#options-1 option").each(function(i, e) { 
     $("<input type='radio' name='r' />") 
     .attr("value", $(this).val()) 
     .attr("checked", i == 0) 
     .click(function() { 
      $("#options-1").val($(this).val()); 
     }) 
     .appendTo("#r"); 
     $("#options-1").change(function(){ 
     $("input[name='r'][value='"+this.value+"']").attr("checked","checked"); 
}); 
}); 
}); 

$("#options-1").change(function(){ 
$("input[name='r'][value='"+this.value+"']").attr("checked","checked"); 

}); 
+0

第一个select有id选项-1,它只是从它那里获取值。 – Micharch54 2010-10-21 08:55:34