我试图从mycontainer
div内获得input
值,当单击"单击我"div。
我只希望它发生,如果输入是一个password
类型,我有这个到目前为止…
function myFunction(el) {
theInput = $(el).closest("input type=['password]").value();
console.log(theInput);
}
.mycontainer {
display: flex;
padding: 10px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="mycontainer">
<input type="text" value="myinput1">
<div onclick="myFunction(this)">Click Me</div>
</div>
<div class="mycontainer">
<input type="password" value="myinput2">
<div onclick="myFunction(this)">Click Me</div>
</div>
<div class="mycontainer">
<input type="number" value="22">
<div onclick="myFunction(this)">Click Me</div>
</div>
<div class="mycontainer">
<input type="password" value="myinput4">
<div onclick="myFunction(this)">Click Me</div>
</div>
每当我点击任何东西时都会抛出错误,我在哪里出错?
您的代码中有多个问题。首先你要找一个家长。输入不是父节点,而是兄弟节点。因此,您可以寻找closest()
的共同父节点,然后寻找find()
的输入,您可以使用siblings()
,或者您可以使用prev()
第二个选择器查找输入属性是错误的。括号需要在整个属性周围,而不是在值周围。
第三,jQuery中没有.value()
function myFunction(el) {
const theInput = $(el).closest(".mycontainer").find('input[type="password"]');
if (theInput.length) {
console.log(theInput.val());
}
// other ways to reference the input
console.log($(el).siblings('input[type="password"]').val());
console.log($(el).prev('input[type="password"]').val());
}
.mycontainer {
display: flex;
padding: 10px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="mycontainer">
<input type="text" value="myinput1">
<div onclick="myFunction(this)">Click Me</div>
</div>
<div class="mycontainer">
<input type="password" value="myinput2">
<div onclick="myFunction(this)">Click Me</div>
</div>
<div class="mycontainer">
<input type="number" value="22">
<div onclick="myFunction(this)">Click Me</div>
</div>
<div class="mycontainer">
<input type="password" value="myinput4">
<div onclick="myFunction(this)">Click Me</div>
</div>
您的代码中有几个问题:
-
选择器不正确。您应该首先以类
mycontainer
的最近元素为目标,并从中找到密码元素。由于属性选择器和输入元素是相同的,它们之间不应该有任何空格,而且属性(type
)应该在[]
内。 -
你正在尝试使用
value()
在jQuery引用元素(不是jQuery方法)上访问值,应该使用val()
function myFunction(el) {
var theInput = $(el).closest(".mycontainer").find("input[type=password]").val();
console.log(theInput);
}
.mycontainer {
display: flex;
padding: 10px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="mycontainer">
<input type="text" value="myinput1">
<div onclick="myFunction(this)">Click Me</div>
</div>
<div class="mycontainer">
<input type="password" value="myinput2">
<div onclick="myFunction(this)">Click Me</div>
</div>
<div class="mycontainer">
<input type="number" value="22">
<div onclick="myFunction(this)">Click Me</div>
</div>
<div class="mycontainer">
<input type="password" value="myinput4">
<div onclick="myFunction(this)">Click Me</div>
</div>