【问题标题】:How to compare jQuery val() and JavaScript value如何比较 jQuery val() 和 JavaScript 值
【发布时间】:2012-11-14 17:41:25
【问题描述】:

当我进行以下比较时,虽然 val() 和 value 在视觉上显示相同的值,但我得到了错误:12

if ($(this).val() == txt.value)//returns false

当我同时提醒 $(this).val() 和 txt.value 时,我得到 12。其中一个是字符串,另一个是 int 吗?如果有,是哪一个?

【问题讨论】:

  • 这是指什么样的节点,你是怎么定义txt的?
  • 我有一个选择和一个输入文本元素。我将 txt.value 与选择中的每个选项值进行比较。我用 $(this).val() 获得选项值,用 txt.value 获得文本框的值。请注意,这是在 $.each 中执行的。
  • 你能在 JSFiddle 上运行一个简单的演示吗?
  • 我试图做一个演示,但我无法在 JSFiddle 的 html 窗格中添加任何内容

标签: javascript jquery html-select html-input


【解决方案1】:

发送typeof 以了解您的值的类型。

console.log(typeof $(this).val());
console.log(typeof txt.value);

jQuery 可能在使用 .val() 时改变了值,比如应该存在的修剪空白。为了确保,您可以避免使用val()

.each() 中的 this 以及第二个参数是每次迭代的 DOM 元素。你可以get the value of the option directly:

$('select > option').each(function(i,el){
   //we should be getting small caps values
   console.log(this.value);
   console.log(el.value);
});

使用松散比较 (==) 时,数字 12 和字符串 12 应该相同。更令人惊讶的是,即使字符串周围有空格也是如此。但经过严格比较 (===),它们不应该是:

"12"    ==  12  // true
" 12  " ==  12  // true; tested on Firefox 20 (nightly)
"12"    === 12  // false

此时,我们已经清除了所有可以想到的问题。如果没有一个有效,那么两者首先可能是完全不同的值。

【讨论】:

  • "12" == 12 // true;在 Chrome 23 上测试
  • 对不起,伙计们,我意识到问题不在于值不匹配,而是因为如果条件为真,我试图从函数返回。条件确实为真,但不知何故,代码在离开 $.each 循环后继续运行。
  • jQuery 在调用.val() 时不会修剪空格,而是将/\r/g 替换为'',或者返回一个空值作为''
【解决方案2】:

我觉得有必要写这么多的 cmets,我觉得这非常有用,在花了这么多时间在这里的家伙之后。所以我的问题是这样的:

('#mySelect option').each(function({
  if ($(this).val() == txt.value)
    return;
});
alert('Code still continues');

尽管条件 $(this).val() == txt.value 的结果为真,但每个循环之后的代码仍然执行。这就是为什么我认为这两个值不匹配。但如果 我在它出现的这种情况下发出了警报。这意味着每个循环内的“返回”行为有问题。我最近开始明白,虽然 return 会在每个循环内停止执行代码,但它不会阻止代码在每个块之后执行。因此,要在 jquery 的每个循环中实现完整的函数返回,我们似乎必须放置一个标志,并根据该标志决定是否在每个循环之后返回。以下代码对我有用:

var shouldContinue = true;
('#mySelect option').each(function ()
{
    if ($(this).val() == txt.value) {
        shouldContinue = false;
        return (false);
    }
});
if (!shouldContinue)
    return; 

注意迭代内部的 return(false)。这意味着,如果条件为真,则不再继续迭代并退出循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 2014-09-01
    • 2014-03-06
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多