2010-10-21 43 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