2009-11-05 87 views
0

我有這個奇怪的問題,通過jQuery隱藏/顯示錶的行和下拉列表。我只想隱藏與下拉列表中選擇的內容不相關的數據,而不是基於過濾器回傳數據。這裏的片段:通過下拉列表隱藏行

$().ready(function() { 
    $("#SupplierID").change(changeme); 
    $("#BusinessID").change(changeme); 
}); 

function changeme() { 
    $("table tr").show(); 
    $("table tr td:nth-child(2):not(:contains('" + $("#SupplierID :selected").text() + "'))").parent().hide(); 
    $("table tr td:nth-child(6):not(:contains('" + $("#BusinessID :selected").text() + "'))").parent().hide(); 
    return false; 
} 

它的問題是,供應商ID工作正常,但BusinessID只有一次一個供應商ID已被選中的作品,而不是之前。如果我進入頁面並從下拉列表中直接選擇BusinessID,則不會發生任何事情。我首先更改供應商ID下拉列表爲了它的工作。此外,如果將SupplierID設置爲「全部」選項(空白值),則BusinessID下拉列表不起作用。

任何想法?

編輯

事實上,這是因爲一個沒有價值的事情錯誤。事情是,這是我現在必須擁有的:

$(function() { 
    $("#SupplierID, #BusinessID").change(changeme); 
}); 

function changeme() { 
    $("table tr").show(); 
    if ($("#SupplierID :selected").val()) { 
    $("table tr td:nth-child(2):not(:contains('" + $("#SupplierID :selected").text() + "'))").parent().hide(); 
    } 

    if ($("#BusinessID :selected").val()) { 
    $("table tr td:nth-child(6):not(:contains('" + $("#BusinessID :selected").text() + "'))").parent().hide(); 
    } 
} 

這似乎有點討厭。任何關於如何使這更優雅的建議?

回答

1

您是否檢查了瀏覽器錯誤控制檯?如果不這樣做。

我猜你的changeme方法中的第二條語句會拋出一個錯誤,除非你選擇了一個SupplierID。

沒有選定供應商的選擇器最終會解決這個問題我猜這可能會失敗,因爲您不會選擇任何可以調用的東西.parent().hide()。 (簡單的測試開關的第二和第三線,並測試行爲是否也切換)。

$("table tr td:nth-child(2):not(:contains(''))").parent().hide(); 

,或者已經在

$("#SupplierID :selected").text() 

哪裏還沒有選定和text()可能會失敗拋出了。

只是一個隨機猜測,快速查看提供源而無需測試。或者代碼中的其他內容失敗。

+0

雖然我會如何捕捉錯誤?文本是「(全部)」,所以它基本上不會找到隱藏的行。我可以檢查所選的是否在索引0?這樣我知道這是全部選項。 – Kezzer