2015-02-23 43 views
0

我有一個函數(下),當DOM加載時,它會找到每個選擇輸入並添加一個屬性data-prev,用於跟蹤以前的選定值值被改變。我如何使用JQuery推廣此功能

$(document).ready(function() { 

    //For each select field, add a data-prev attribute set for tracking the previous value for when it gets changed 
    $('select').each(function(){ 
    $(this).attr("data-prev", $(this).val()) 
    }); 
} 

現在,我的網頁包括獲得動態創建(在頁面加載後)選擇字段,我還需要設置data-prev屬性。所以,我認爲這對我來說將上面的功能推廣到像

function SetDataPrevAttr(element=None) 
    if element is None: 
     for each select field in DOM set the attribute data-prev to its current value 
    else: 
     for each select field in the descendant elements of element (including element) set the attribute data-prev to its current value 

我該怎麼做?

+0

如何將這個函數知道什麼時候上的動態投入運行? – joshhunt 2015-02-23 02:53:27

+0

在用於創建選擇字段的同一代碼塊中,我會執行類似於「調用SetDataPrevAttr(myNewForm)」的方法,或者至少這是我的想法。 – Ben 2015-02-23 02:55:49

+0

我不是100%你正在瞄準的目標,但你可以讓它變得更簡單,並使用像'$(document).on('change','select',function(){'? – joshhunt 2015-02-23 02:58:00

回答

0
function SetDataPrevAttr(elem) { 
    elem.each(function() { 
     $(this).attr('data-prev', $(this).val()); 
    }); 
} 

$(function() { 
    SetDataPrevAttr($('select')); 
}); 

然後在每次添加新的元素,你可以做到以下幾點:

var element = $('<select></select>').appendTo(document); 
SetDataPrevAttr(element); 
1

爲什麼不直接設置於前值,當<select>獲得焦點(即,它改變之前)?這樣,你可以使用委託事件處理程序。例如...

$(document).on('focus', 'select', function() { 
    var $sel = $(this); 
    if (!$sel.data('prev')) { 
     $sel.data('prev', $sel.val());     
    } 
}); 

JSFiddle Demo

+0

這是一個比我計劃做的更好的方法。 – Ben 2015-02-23 03:08:53