2009-08-11 52 views

回答

7

這不太難。這將跟蹤值在頁面上每個select

$(document).ready(function() { 
    $("select").each(function() { 
     var originalValue = $(this).val(); 

     $(this).change(function() { 
      if ($(this).val() != originalValue) 
       $(this).addClass('value-has-changed-since-page-loaded'); 
      else 
       $(this).removeClass('value-has-changed-since-page-loaded'); 
     }); 
    }); 
}); 

這將適用新的類value-has-changed-since-page-loaded(這大概你會重命名爲更相關)的任何選擇框,其值是它不同當頁面加載。

只要您有興趣知道該值已更改,就可以利用該類。

+5

如果用'$(this).toggleClass('val-has-changed',$(this).val()!= originalValue)替換if語句,甚至可以縮短它; – RaYell 2009-08-11 17:21:29

1
$(document).ready(function() { 
    var initialSelectValue = $('#yourselect').val(); 

    // call this function when you want to check the value 
    // returns true if value match, false otherwise 
    function checkSelectValue() { 
     return $('#yourselect').val() === initialSelectValue; 
    } 
}); 

PS。您應該使用selected="selected"而不是selected="yes"

+0

難道你不需要一種方法將內部函數公開給外部世界嗎? – phairoh 2009-08-11 17:13:42

+0

嗯,我假設你把所有的JS代碼放在'ready'回調中。如果你想把它暴露給不同的腳本,你可以在外面定義它。 – RaYell 2009-08-11 17:17:12

1

在頁面加載,創建按名稱索引的每個選擇框的初始值的數組:如果值已更改

var select_values = []; 

$(document).ready(function() { 
    $("select").each(function() { 
     select_values[$(this).attr('name')] = $(this).val(); 
    }); 
}); 

後,當您需要檢查:

function has_select_changed(name) { 
    return $("select[name="+name+"]").val() != select_values[name]; 
} 
0

首先,一個片段:

$('select').each( 
    function(){ 
    if(this.options[ this.selectedIndex ].getAttribute('selected') === null){ 
      alert(this.name +' has changed!') 
    } 
}); 

現在的解釋:

假設selectElement是一個<參考選擇/ > elementYou可以檢查使用被選擇的選項

selectElement.selectedIndex 

要獲取當前選中的<選項/ >元素,請使用

selectElement.options[ selectElement.selectedIndex ] 

現在,當你知道你可以找出哪些選項選擇元素如果此元素的選擇=「選擇」屬性(如源代碼,它不會改變 - 這是不一樣的。選擇DOM節點的屬性,對於當前選定的選項元素是真實的,當選擇被改變時會改變)

相關問題