2010-03-22 68 views
0

我有第二個選擇列表選項從第一個選擇列表選擇選項生成的情況。就像我們選擇國家時相應的狀態在下一個選擇列表中生成一樣。清除當在同一頁上使用多個表單時選擇一個字段時選擇選項

在我的情況下,我在單個頁面上有多個相同的表單。任何人都可以讓我知道如何在多種形式上實現它。

我試着下面的代碼,但沒有奏效

 $(".country").change(function(){ 
     $.get("sample.php?val=" + $(this).val(), 
     function(data){ 
      $(this).parent().next().children('.state').children('option').remove(); 
      $(this).parent().next().children('.state').append(data); 
     }); 

等待您的支持表示感謝提前

+0

你可以發佈HTML(告訴列表的位置)以及來自sample.php的樣本響應嗎? – 2010-03-22 11:19:16

+0

感謝您的支持 – Nizam 2010-03-22 11:43:27

回答

2

假設所有已包含<select class='country'><select class='state'>相同<form>元素在裏面可以使用.closest().find()遍歷並不會如此依賴於準確的DOM定位「多形式」:

$('.country').change(function() { 
    var $stateSelect = $(this).closest('form').find('select.state'); 

    $.get('sample.php?val='+$(this).val(), function(data) { 
    $stateSelect.empty().append(data); 
    }); 
}); 

而且,您在回調中使用的$(this)可能無法正常工作。這個回調函數被調用爲this作爲jQuery的AJAX選項對象。如果需要將事件函數保存在事件函數內部的其他回調函數/閉包中,可以使用函數範圍將var $this = $(this);保存在事件函數中(如我保存的$stateSelect)。

+0

這對我來說非常完美。 感謝哥們 – Nizam 2010-03-22 11:42:30

0
$(".country").change(function(){ 
    $.get("sample.php?val=" + $(this).val(), 
    function(data){ 
     // console.log($this); 
     $(this).parent().next().children('.state').children('option').remove(); 
     $(this).parent().next().children('.state').append(data); 
    }); 

我不是100%肯定,但你可能會被誤解thisfunction(data)。嘗試在我註釋掉的行中運行console.log($this);

以下工作? this在JavaScript中是一個討厭的概念,但它很強大,值得學習。

$(".country").change(function(){ 
    var country = $(this); 
    $.get("sample.php?val=" + $(this).val(), 
    function(data){ 
     country.parent().next().children('.state').children('option').remove(); 
     country.parent().next().children('.state').append(data); 
    }); 
0

假設元素之間的關係是正確的,這應該工作,有點更簡潔:

$('.country').change(function() { 
    var sel = $(this).parent().next().children('.state'); 
    $.get('sample.php?val='+$(this).val(), function(data) { 
    sel.html(data); 
    }); 
}); 

的問題是,this並不是指你所想象的那樣,當$.get回來,因爲它是異步的,需要存儲該引用並在返回時使用它。

相關問題