使用 jquery 将 mouseenter 事件添加到数组中具有名称的所有输入
Add mouseenter event to all inputs with name in array using jquery
我不知道如何使用我的数组包含的名称对所有输入调用我的函数。我试过了:
var names = ["name1", "name2"];
$(document).ready(function(){
$('input[name=names[0]').on("mouseenter", function() {
$(this).attr('title', 'This is the hover-over text');
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h2>Head</h2>
<p>This is a paragraph.</p>
<p>This is another paragraph.</p>
<input type="text" name="name1"> <!--This should have title-->
<input type="text" name="name2"> <!--This should have title-->
<input type="text" name="name3"> <!--This should not have title--
我试着把第一个元素放在那里,但我什至做不到。我是 jquery(也是 js)的新手,所以解决方案可能很明显。
您只需 运行 遍历数组并为包含输入名称的每个数组元素添加事件侦听器。
$(document).ready(function(){
$.each(names , function(index, item) {
$("input[name="+ item +"]").on("mouseenter", function() {
$(this).attr('title', 'This is the hover-over text');
});
});
});
试试这个:
$("input[name^='name'").on("mouseenter", function() {
...
参考 URL:https://api.jquery.com/attribute-starts-with-selector/
使用 .filter()
过滤 jquery 选择器,然后为其添加事件侦听器。
var names = ["name1", "name2"];
$("input").filter(function(){
return names.indexOf($(this).attr("name")) != -1;
}).on("mouseenter", function() {
$(this).attr('title', 'This is the hover-over text');
});
var names = ["name1", "name2"];
$("input").filter(function(){
return names.indexOf($(this).attr("name")) != -1;
}).on("mouseenter", function() {
$(this).attr('title', 'This is the hover-over text');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" name="name1" value="name1">
<input type="text" name="name2" value="name2">
<input type="text" name="name3" value="name3">
您还可以为所有输入添加事件侦听器,并在回调函数中检查它的名称。
var names = ["name1", "name2"];
$("input").on("mouseenter", function() {
if (names.indexOf($(this).attr("name")) != -1){
$(this).attr('title', 'This is the hover-over text');
}
});
var names = ["name1", "name2"];
$("input").on("mouseenter", function() {
if (names.indexOf($(this).attr("name")) != -1){
$(this).attr('title', 'This is the hover-over text');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" name="name1" value="name1">
<input type="text" name="name2" value="name2">
<input type="text" name="name3" value="name3">
您的问题似乎与您使用选择器的方式有关。它不是将其作为数组的一部分而不是字符串来读取。
$(document).ready(function(){
var names = ["name1", "name2"];
// interpolation
$(`input[name=${names[0]}]`).on("mouseenter", function() {
$(this).attr('title', 'This is the hover-over text');
});
// or without interpolation
$('input[name=' + names[1] + ']').on("mouseenter", function() {
$(this).attr('title', 'This is different hover-over text');
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" name="name1" />
<input type="text" name="name2" />
你可以这样做:
var names = ["name1", "name2"];
//Iterate over all the text box inputs in your HTML
document.querySelectorAll('[type=text]').forEach(function(el) {
//Check if el name attribute is in the array
if (names.indexOf(el.name) > -1) {
//If so, add a change event listener
el.addEventListener('keyup', function(e) {
//Set the title attribute to something new
updateTitle(el, e);
});
}
});
function updateTitle(el, e) {
el.title = e.target.value;
console.log(`Updated ${el.name}: title attribute changed to ${el.title}`);
}
<h2>Head</h2>
<p>This is a paragraph.</p>
<p>This is another paragraph.</p>
<input type="text" name="name1">
<!--This should have title-->
<input type="text" name="name2">
<!--This should have title-->
<input type="text" name="name3">
<!--This should not have title-->
我不知道如何使用我的数组包含的名称对所有输入调用我的函数。我试过了:
var names = ["name1", "name2"];
$(document).ready(function(){
$('input[name=names[0]').on("mouseenter", function() {
$(this).attr('title', 'This is the hover-over text');
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h2>Head</h2>
<p>This is a paragraph.</p>
<p>This is another paragraph.</p>
<input type="text" name="name1"> <!--This should have title-->
<input type="text" name="name2"> <!--This should have title-->
<input type="text" name="name3"> <!--This should not have title--
我试着把第一个元素放在那里,但我什至做不到。我是 jquery(也是 js)的新手,所以解决方案可能很明显。
您只需 运行 遍历数组并为包含输入名称的每个数组元素添加事件侦听器。
$(document).ready(function(){
$.each(names , function(index, item) {
$("input[name="+ item +"]").on("mouseenter", function() {
$(this).attr('title', 'This is the hover-over text');
});
});
});
试试这个:
$("input[name^='name'").on("mouseenter", function() {
...
参考 URL:https://api.jquery.com/attribute-starts-with-selector/
使用 .filter()
过滤 jquery 选择器,然后为其添加事件侦听器。
var names = ["name1", "name2"];
$("input").filter(function(){
return names.indexOf($(this).attr("name")) != -1;
}).on("mouseenter", function() {
$(this).attr('title', 'This is the hover-over text');
});
var names = ["name1", "name2"];
$("input").filter(function(){
return names.indexOf($(this).attr("name")) != -1;
}).on("mouseenter", function() {
$(this).attr('title', 'This is the hover-over text');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" name="name1" value="name1">
<input type="text" name="name2" value="name2">
<input type="text" name="name3" value="name3">
您还可以为所有输入添加事件侦听器,并在回调函数中检查它的名称。
var names = ["name1", "name2"];
$("input").on("mouseenter", function() {
if (names.indexOf($(this).attr("name")) != -1){
$(this).attr('title', 'This is the hover-over text');
}
});
var names = ["name1", "name2"];
$("input").on("mouseenter", function() {
if (names.indexOf($(this).attr("name")) != -1){
$(this).attr('title', 'This is the hover-over text');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" name="name1" value="name1">
<input type="text" name="name2" value="name2">
<input type="text" name="name3" value="name3">
您的问题似乎与您使用选择器的方式有关。它不是将其作为数组的一部分而不是字符串来读取。
$(document).ready(function(){
var names = ["name1", "name2"];
// interpolation
$(`input[name=${names[0]}]`).on("mouseenter", function() {
$(this).attr('title', 'This is the hover-over text');
});
// or without interpolation
$('input[name=' + names[1] + ']').on("mouseenter", function() {
$(this).attr('title', 'This is different hover-over text');
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" name="name1" />
<input type="text" name="name2" />
你可以这样做:
var names = ["name1", "name2"];
//Iterate over all the text box inputs in your HTML
document.querySelectorAll('[type=text]').forEach(function(el) {
//Check if el name attribute is in the array
if (names.indexOf(el.name) > -1) {
//If so, add a change event listener
el.addEventListener('keyup', function(e) {
//Set the title attribute to something new
updateTitle(el, e);
});
}
});
function updateTitle(el, e) {
el.title = e.target.value;
console.log(`Updated ${el.name}: title attribute changed to ${el.title}`);
}
<h2>Head</h2>
<p>This is a paragraph.</p>
<p>This is another paragraph.</p>
<input type="text" name="name1">
<!--This should have title-->
<input type="text" name="name2">
<!--This should have title-->
<input type="text" name="name3">
<!--This should not have title-->