2017-05-09 103 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 

      ... 
     });