按下按钮时,我会创建一个新窗口。这个窗口包含我想用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]");
});
});
答案 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]
,如果是这样的话。