Javascript 在if语句中使用$(this)

Javascript 在if语句中使用$(this),javascript,jquery,html,Javascript,Jquery,Html,我们需要让用户在输入框中输入一个数字,如果是负数,则应用负数样式,这将使显示的文本变为红色。但是,我很难让if语句正常工作 HTML: 。如果你把它从if语句中去掉,它就会起作用,所以问题似乎是$this没有进入if语句。编辑:看来我的假设是不正确的。见下面的评论。类似的问题也使用了.filter来解决这个问题,但我不知道如何使用上面的代码来解决这个问题 那么,如何使其工作呢?您可以简单地将$this隔离在一个变量中,如下所示: $('.input [type="number"]').on('b

我们需要让用户在输入框中输入一个数字,如果是负数,则应用负数样式,这将使显示的文本变为红色。但是,我很难让if语句正常工作

HTML:

。如果你把它从if语句中去掉,它就会起作用,所以问题似乎是$this没有进入if语句。编辑:看来我的假设是不正确的。见下面的评论。类似的问题也使用了.filter来解决这个问题,但我不知道如何使用上面的代码来解决这个问题


那么,如何使其工作呢?

您可以简单地将$this隔离在一个变量中,如下所示:

$('.input [type="number"]').on('blur', function(){
    var number = Math.round($(this).val() * 100) / 100;
    var number = Math.round($(this).val() * 100) / 100;
    var text = number.toFixed().toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    var this$ = $(this);
    if (number < 0) {
         this$.prev().addClass('negative');
        text = "("+text.replace(/-/g,"")+")";
    }
[...]

你的问题不在$this甚至if的范围之内。问题是您正在使用$this.prev.addClass'negative'将类negative添加到文本框中;大约5行之后,在执行$this.prev.removeClass时再次删除它

您需要指定只想删除隐藏的类,并且该位可以正常工作

之后,您还需要处理它们是否从负值变为正值,因此添加另一个块以删除负值类

最后,可能更安全的方法是检查是否存在!首先编号,然后执行其他路径

$document.readyfunction{ $'.input[type=text]'。在“焦点”上,函数{ $this.next.removeClass.focus; $this.addClass'hidden'; }; $'.input[type=number]'。在'blur'上,函数{ 变量编号=数学四舍五入$this.val*100/100; var text=number.toFixed.toString.replace/\B?=\d{3}+?!\d/g, 如果!号码{ 文本=-; $this.prev.removeClass'negative'; } 如果数字小于0,则为else{ $this.prev.addClass'negative'; text=+text.replace/-/g,+; }否则{ $this.prev.removeClass'negative'; } $this.prev.valtext; $this.prev.removeClass'hidden'; $this.addClass'hidden'; }; }; 输入{ 文本对齐:右对齐; 宽度:10em; /*添加填充时,框大小保持宽度固定http://stackoverflow.com/a/9484932/1652620 */ -webkit盒尺寸:边框盒;/*Safari/Chrome,其他webkit*/ -moz盒大小:边框盒;/*Firefox,其他壁虎*/ 盒尺寸:边框盒;/*Opera/IE 8+*/ } .input[type='text']{ 背景颜色:黄色; 右边填充:14px;/*与数字文本对齐*/ -webkit盒尺寸:边框盒;/*Safari/Chrome,其他webkit*/ -moz盒大小:边框盒;/*Firefox,其他壁虎*/ 盒尺寸:边框盒;/*Opera/IE 8+*/ } .input[type='number']{背景色:橙色;} .hidden{显示:无;} .负片{颜色:红色;} /*要添加$sign的格式设置http://stackoverflow.com/q/8222528/1652620 */ .input{位置:相对;} .货币符号{ 字号:0.6em; 位置:绝对位置; 顶部:7px; 左:5px; } .currency_symbol::在{content:$}之前
您的问题在别处,在if语句中使用$this是正确的。你的小提琴应该做什么?每次我点击黄色输入,它就消失了如果语句块没有不同的作用域,那么$this没有进入if不正确现在我真的不知所措。.replace函数在if语句中工作,$this.prev.addClass'negative';在if语句之外工作,所以我认为我已经缩小了导致问题的范围。这是您想要的吗?removeClass是您的问题,没有参数它会删除所有类,因此您的行$this.prev.removeClass;在你添加了负类之后,正在删除它。当你点击它们时,输入也会消失,如果你不删除焦点,它将始终在FF上消失mac@Huangism似乎在Chrome上对我来说很好——我认为这个想法是切换查看文本和数字。你用的是哪种浏览器?可能它把数字输入解释为文本更新了我的评论,FF正在与Focus一起消失。FF Mac的问题让我抓狂不已,我已经发布了相关信息。如果我不能让上面的代码在Firefox上运行,那么就无法部署它@黄先生,如果您有任何见解,我非常感谢您在这个问题上的意见。
$(document).ready(function(){
    $('.input [type="text"]').on('focus', function(){
        $(this).next().removeClass().focus();
        $(this).addClass('hidden');
    });
    $('.input [type="number"]').on('blur', function(){
        var number = Math.round($(this).val() * 100) / 100;
        var text = number.toFixed().toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
        if (number < 0) {
            $(this).prev().addClass('negative');
            text = "("+text.replace(/-/g,"")+")";
        }
        if (!number) {text = "-";}
        $(this).prev().val(text);
        $(this).prev().removeClass();
        $(this).addClass('hidden');
    });
});
$('.input [type="number"]').on('blur', function(){
    var number = Math.round($(this).val() * 100) / 100;
    var number = Math.round($(this).val() * 100) / 100;
    var text = number.toFixed().toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    var this$ = $(this);
    if (number < 0) {
         this$.prev().addClass('negative');
        text = "("+text.replace(/-/g,"")+")";
    }
[...]