2017-05-09 136 views
1

我工作的一個功能:創建一個變量來等於一個動態創建的DOM元素

var container  = $('#container'), 
    line1   = $('#line1'), 
    line2   = $('#line2'), 
    line3   = $('#line3'), 
    line4   = $('#line4'), 
    postcode  = $('#postcode'), 
    addressPicker = $('#selector'), 
    noneOfTheAbove = $('#noneOfTheAbove'); 

    $(document).on('click', '#noneOfTheAbove', function() 
    { 
     container.removeClass('hidden'); 

     noneOfTheAbove.addClass('noDisplayElementImportant'); 
     addressPicker.addClass('hidden'); 

     line1.val(''); 
     line2.val(''); 
     line3.val(''); 
     line4.val(''); 
     postcode.val(''); 
    }); 

與此唯一的問題是大幹快上點擊一個按鈕動態創建的DOM。因此,使用像這樣的變量不起作用,因爲它們不存在$(document).ready()。我如何將動態DOM元素分配給一個變量?會不會像$(document).find('#idHere')

感謝

更新1個

製作瓦爾全球然後本地(使用charlietfl答案):

var container, 
    line1, 
    line2, 
    line3, 
    line4, 
    postcode, 
    addressPicker, 
    noneOfTheAbove; 

$(document).on('click', '#noneOfTheAbove', function() 
{ 
    container  = $('#container'); 
    line1   = $('#line1'); 
    line2   = $('#line2'); 
    line3   = $('#line3'); 
    line4   = $('#line4'); 
    postcode  = $('#postcode'); 
    addressPicker = $('#selector'); 
    noneOfTheAbove = $('#noneOfTheAbove'); 

    container.removeClass('hidden'); 

    noneOfTheAbove.addClass('noDisplayElementImportant'); 
    addressPicker.addClass('hidden'); 

    line1.val(''); 
    line2.val(''); 
    line3.val(''); 
    line4.val(''); 
    postcode.val(''); 
}); 

回答

1

定義這些變量的事件處理中,當他們確實存在,當然

$(document).on('click', '#noneOfTheAbove', function() { 

    var container = $('#container'), 
    line1 = $('#line1'), 
    line2 = $('#line2'), 
    line3 = $('#line3'), 
    line4 = $('#line4'), 
    postcode = $('#postcode'), 
    addressPicker = $('#selector'), 
    noneOfTheAbove = $('#noneOfTheAbove'); 
    container.removeClass('hidden'); 

    noneOfTheAbove.addClass('noDisplayElementImportant'); 
    addressPicker.addClass('hidden'); 

    line1.val(''); 
    line2.val(''); 
    line3.val(''); 
    line4.val(''); 
    postcode.val(''); 
}); 
+0

啊!似乎現在很愚蠢xD謝謝:) – ThisGuyHasTwoThumbs

+0

既然你讓它們在函數中是局部的,它們在那個函數之外是沒有用的,因此你根本就不需要它們。 –

+0

@ANS *「完全不需要它們」*是主觀的......取決於它們中的任何一個可能在dom中被查詢的次數。我同意基於顯示的基本代碼,但也不知道實際代碼是否更復雜。至於在外面宣佈他們沒有任何理由,這是 – charlietfl

1

不要急於負載他們,因爲他們是動態的。使用延遲加載,這意味着當你需要它們時使用它們。

var container, 
    line1,line,.. ; 
    $(document).on('click', '#noneOfTheAbove', function() 
     { 
      container = $('#container'); 
      container.removeClass('hidden'); 

      ... // others 

      ... 
     });