jQuery:从“live”元素中获取属性

时间:2010-06-23 10:50:42

标签: javascript jquery

按下按钮时,我会创建一个新窗口。这个窗口包含我想用jquery操作的html输入元素,但我无法捕获这些元素。通常我会使用live函数,因为当按下按钮时html首先被添加到dom中,但它不起作用。

 jQuery(document).ready(function () {
    var opretKnap = jQuery("input[value='Open window']");

    jQuery(opretKnap).live('click', function () {

            var inputsDate = jQuery("input[vdfDataType]");

    });
});

1 个答案:

答案 0 :(得分:0)

jQuery("input[vdfDataType]");

什么是vdfDataType?这不是标准的HTML属性。你是否意味着使用自定义属性? (这是一个普遍有问题的策略,特别是当你想选择它们时。)

您尝试在当前文档中获取的元素是什么?你说这是一个'新窗口',但如果你的意思是新窗口而不是页面内的DOM弹出窗口,你将无法从打开它的文档中选择它。

jQuery(opretKnap).live

应为avoided

  

应始终在选择器

之后直接调用.live()方法

也就是说,紧接jQuery()调用之前live()包装器中的参数应该是一个选择器字符串,例如直接"input[value='Open window']"opretKnap已经是一个jQuery包装器,所以opretKnap.live()就可以了。

jQuery("input[value='Open window']")

避免使用value作为属性选择器。除了它不是非常具体(如果某个文本字段恰好在其中包含该字符串会发生什么?),对于jQuery中的许多情况它也是不可靠的。

value HTML属性和value DOM属性是文本输入(和其他一些)的两个不同的东西;该属性提供当前字段值,而该属性提供在任何用户输入之前在HTML中指定的原始值。此属性映射到DOM defaultValue属性,而不是value

然而,jQuery使用的Sizzle选择器引擎中的一个错误意味着它将优先读取value属性。这会给出“错误的”(但可能是期望的)结果......但不是一致的,因为在很多情况下,浏览器自己的querySelectorAll调用将用于速度,缩短Sizzle的错误。

虽然这可能不会影响您(例如,如果您选择的按钮,其值永远不会改变),您应该认为[value=...]选择器非常可疑,并尽可能避免使用它。找到另一种方法来选择您想要的特定输入,例如.class#id[name="something"][type=submit],如果是这样的话。