2

在下面的jquery中,“点”之前是否应该有一个结束括号“)”:

.test($……”?

(/^\s*$/.test($(this).val()))

$(document).ready(function () {
    $('#userlogin').css('color', '#cccccc').val('LOGINNAME');   

    $('#userlogin').blur(function () {
        if (/^\s*$/.test($(this).val())) {
            $(this).val('LOGINNAME');
            $(this).css('color', '#cccccc');
            $(this).valid();
        }
    }).focus(function () {
        if ($(this).val() === 'LOGINNAME') {
            $(this).val('');
            $(this).css('color', '#000000');
        }
    });

如果不是,为什么不呢?这段代码对我来说有点奇怪。

4

4 回答 4

4

代码是正确的:

/^\s*$/  // create a regex
  .test( // call the test method on it
    $(this) // create a jquery object
      .val() // call the val method on it
  )

但是,可以缓存该值:var val = $(this).val();. 那么这条线可能不会让你感到困惑:/yourregex/.test(val)

于 2012-05-18T16:02:03.920 回答
2

/^\s*$/是一个正则表达式文字,它有一个正在调用的测试方法。括号来自较大的 if 条件。

由于 javascript 是完全面向对象的,即使是文字也可以有方法。

于 2012-05-18T16:02:26.420 回答
2
/^\s*$/.test( $(this).val() )

第一部分是正则表达式——不是字符串或其他任何东西。/因此,它以分隔符和.开头和结尾/

使用.match有时更清晰,因为它似乎没有一些奇怪的未绑定项目在源中浮动:

$(this).val().match(/^\s*$/);

这个特定的表达式,分解后,如下所示:

/^   // Beginning of String
\s*  // Space, zero or more times
$/   // End of String

因此,如果从头到尾有零个或多个空格,它将测试为阳性,仅此而已。

于 2012-05-18T16:03:17.507 回答
2

代码很好。如果您认为它不可读,为什么不先创建正则表达式

var regex = /^\s*$/;
if(regex.test($(this).val())
    ...
于 2012-05-18T16:04:03.170 回答