jQuery 更改事件未在输入元素上触发
jQuery change event not firing on input element
首先,我检查了与我的问题相似的每个主题,不幸的是,我还没有找到我的答案。我试图结合一些答案,但没有成功。 (注:刚开始学习jQuery)
所以这是我的问题:
我创建了一个带有四个文本输入框和一个按钮的表单。每个输入里面都有一个 svg 图标和一个占位符文本。
HTML:
<div class="first-field">
<input class="text" type="text" placeholder="Uw naam.." value="">
<svg class="unfilled" id="svg_user">
</svg>
</div>
(我删除了 svg 数据,因为它不相关。)
svg 图标与占位符的颜色相同。输入的文字颜色稍浅。我想将 svg 图标的颜色更改为与输入文本相同的颜色,但仅在输入内容时才如此。
首先,我尝试在输入内容时发出警报,以检查它是否知道输入内容的时间。我使用了 jQuery 网站上的示例:
$( ".text" ).change(function() {
alert( "Handler for .change() called." );
});
这不起作用,根据文档,它应该起作用。
我在堆栈上找到了这个解决方案,但这也行不通:
$(document).ready(function () {
$('.text').keyup(function () { alert('test'); });
});
没有警报,我无法继续构建解决方案。
快速总结:
SVG 图标需要更改为与输入文本相同的颜色,但只有在输入内容时才会如此。删除后,它应该变回占位符文本的颜色。
现在,我感谢大家的帮助。
需要将代码包装在 document.ready
包装器中的原因是,代码希望在加载时 运行 立即 。通常,DOM 之前的代码 运行 已创建(即页面已完全呈现)——因此代码需要访问的一些元素还不存在——并且代码休息。
下面是一个使用 document.ready 包装器的例子:
HTML:
<div class="first-field">
<input class="text" type="text" placeholder="Uw naam.." value="" />
<svg class="unfilled" id="svg_user"></svg>
</div>
javascript/jQuery:
var ran=0;
$(document).ready(function() {
$('.text').keyup(function(e) {
if (ran == 0){
ran++;
alert('test');
}
});
}); //END document.ready
但是,如果 HTML 是通过 javascript 或通过 AJAX(通过 .load()
)或类似的方式注入的,则用户事件将不会触发运行.
的任何代码
在那种情况下,有一个简单的解决方案:使用jQuery的.on()
方法。
var ran=0;
$(document).ready(function() {
$(document).on('keyup', '.text', function(e) {
if (ran == 0){
ran++;
alert('test');
}
});
}); //END document.ready
以上小改动:
$(document).on('keyup', '.text', function(e) {
将事件处理程序绑定到文档本身,并告诉它监视任何涉及 class .text
.
元素的 keyup
事件
其中一个应该可以正常工作。
请注意,为您构建的示例包含一个 CHECK,因此 keyup
操作不会执行多次。您可以删除它并让代码对每次按键执行某些操作:
$(document).ready(function() {
$('.text').keyup(function(e) {
alert('test');
});
}); //END document.ready
我找到了解决问题的方法!
我发现 jQuery 无法处理常规的 'classes' 和“id”。所以方法 .addClass() 和 .removeClass() 将不起作用。
有效的方法是使用 .attr() 方法添加新的或旧的(默认)class。这是代码:
$(function(){
$('.text').keyup(function(){
if ($(this).val() == '') { //Check to see if there is any text entered
//If there is no text within the input then add class 'unfilled'
$("#svg_user").attr("class", "unfilled");
} else {
//If there is text in the input, then change the class from 'unfilled' to 'filled'
$("#svg_user").attr("class", "unfilled filled");
}
});
});
感谢大家帮助我入门!
首先,我检查了与我的问题相似的每个主题,不幸的是,我还没有找到我的答案。我试图结合一些答案,但没有成功。 (注:刚开始学习jQuery)
所以这是我的问题:
我创建了一个带有四个文本输入框和一个按钮的表单。每个输入里面都有一个 svg 图标和一个占位符文本。
HTML:
<div class="first-field">
<input class="text" type="text" placeholder="Uw naam.." value="">
<svg class="unfilled" id="svg_user">
</svg>
</div>
(我删除了 svg 数据,因为它不相关。)
svg 图标与占位符的颜色相同。输入的文字颜色稍浅。我想将 svg 图标的颜色更改为与输入文本相同的颜色,但仅在输入内容时才如此。
首先,我尝试在输入内容时发出警报,以检查它是否知道输入内容的时间。我使用了 jQuery 网站上的示例:
$( ".text" ).change(function() {
alert( "Handler for .change() called." );
});
这不起作用,根据文档,它应该起作用。
我在堆栈上找到了这个解决方案,但这也行不通:
$(document).ready(function () {
$('.text').keyup(function () { alert('test'); });
});
没有警报,我无法继续构建解决方案。 快速总结:
SVG 图标需要更改为与输入文本相同的颜色,但只有在输入内容时才会如此。删除后,它应该变回占位符文本的颜色。
现在,我感谢大家的帮助。
需要将代码包装在 document.ready
包装器中的原因是,代码希望在加载时 运行 立即 。通常,DOM 之前的代码 运行 已创建(即页面已完全呈现)——因此代码需要访问的一些元素还不存在——并且代码休息。
下面是一个使用 document.ready 包装器的例子:
HTML:
<div class="first-field">
<input class="text" type="text" placeholder="Uw naam.." value="" />
<svg class="unfilled" id="svg_user"></svg>
</div>
javascript/jQuery:
var ran=0;
$(document).ready(function() {
$('.text').keyup(function(e) {
if (ran == 0){
ran++;
alert('test');
}
});
}); //END document.ready
但是,如果 HTML 是通过 javascript 或通过 AJAX(通过 .load()
)或类似的方式注入的,则用户事件将不会触发运行.
在那种情况下,有一个简单的解决方案:使用jQuery的.on()
方法。
var ran=0;
$(document).ready(function() {
$(document).on('keyup', '.text', function(e) {
if (ran == 0){
ran++;
alert('test');
}
});
}); //END document.ready
以上小改动:
$(document).on('keyup', '.text', function(e) {
将事件处理程序绑定到文档本身,并告诉它监视任何涉及 class .text
.
keyup
事件
其中一个应该可以正常工作。
请注意,为您构建的示例包含一个 CHECK,因此 keyup
操作不会执行多次。您可以删除它并让代码对每次按键执行某些操作:
$(document).ready(function() {
$('.text').keyup(function(e) {
alert('test');
});
}); //END document.ready
我找到了解决问题的方法! 我发现 jQuery 无法处理常规的 'classes' 和“id”。所以方法 .addClass() 和 .removeClass() 将不起作用。
有效的方法是使用 .attr() 方法添加新的或旧的(默认)class。这是代码:
$(function(){
$('.text').keyup(function(){
if ($(this).val() == '') { //Check to see if there is any text entered
//If there is no text within the input then add class 'unfilled'
$("#svg_user").attr("class", "unfilled");
} else {
//If there is text in the input, then change the class from 'unfilled' to 'filled'
$("#svg_user").attr("class", "unfilled filled");
}
});
});
感谢大家帮助我入门!