【问题标题】:Why does datepicker() accept the argument 'getDate'?为什么 datepicker() 接受参数“getDate”?
【发布时间】:2013-04-02 17:00:47
【问题描述】:
var year= $("input[name=dateAccessed]").datepicker('getDate').getFullYear()

上面的代码获取的是日期选择器中设置的日期,然后只获取日期的年份,然后将其保存在一个名为year的变量中。

我知道这段代码将名称为 dateAccessed 的输入字段转换为一个 jQuery 对象。由于它现在是一个 jQuery 对象,因此可以对其应用 jQuery 方法。

然后我应用日期选择器,日期选择器是方法还是对象?我不明白,因为它同时接受参数(使其成为方法)和属性(对象具有属性)。有没有对象+方法之类的东西?

为什么 datepicker 接受参数('getDate') 来返回选定的日期?这是如何运作的?

如果 datepicker 有一个 .getDate 方法不是更好吗?所以我们可以写成datepicker().getDate.getFullYear()

【问题讨论】:

  • .datepicker('getDate') 返回一个Date 对象,因为您传递了"getDate"。这是一个 jQuery 方法,它根据您传递(或不传递)给它的内容返回特定的内容。并且有很多选项供您将东西传递给它 - api.jqueryui.com/datepicker/#options。由于返回了Date,因此您可以立即调用getFullYear(),这是一个Date 方法。这是一个 jQuery 方法,因为它很容易与一组匹配的元素(jQuery 选择器)集成。

标签: javascript jquery jquery-ui object datepicker


【解决方案1】:

日期选择器

datepicker 是一个函数。该函数使用括号('getDate') 调用,由于此参数的值为'getDate',它返回一个Javascript Date 对象,它是本机Javascript 并具有getFullYear 函数。

有关datepicker 的更多信息,请参阅jQuery UI Datepicker 小部件页面的the getDate section

getDate()

Returns: Date
Returns the current date for the datepicker or null if no date has been selected.

    This method does not accept any arguments.

Code examples:

Invoke the getDate method:

var currentDate = $( ".selector" ).datepicker( "getDate" );

Javascript 概念

在 Javascript 中帮助您的一个关键概念是了解函数调用和函数引用之间的区别。请参阅another of my javascript answers,了解更多详情。一旦你理解了这一点,你就会明白为什么“日期选择器是一个方法还是一个对象”必须用“它是一个函数对象”来回答。

在 Javascript 中,函数只是特殊的对象,可以通过在其名称后添加一对括号来调用。这样做不会返回函数对象本身,而是返回任何函数对象返回,其中包含return somethingHere; 的语句。它可以帮助您阅读更多关于prototypal inheritance的信息。

jQuery 概念

jQuery 利用了 Javascript 的链接能力。这是您调用函数的地方,该函数返回一个对象,您可以在该对象上调用另一个函数——一次又一次。另一种使用模式是为链的每个步骤声明变量并采取单个步骤,但这会变得混乱,通常我们都希望避免在不必要的地方声明变量。如果我们要转换您的代码以便没有链接,它可能看起来像这样:

var dateAccessedInput, selectedDate, year;
dateAccessedInput = $("input[name=dateAccessed]");
selectedDate = dateAccessedInput.datepicker('getDate');
year = selectedDate.getFullYear();

在 jQuery 中,jQuery 函数在可能的情况下返回相同的 jQuery 对象是常见的做法,这样您就可以将另一个方法链接到它之外。当链接变长时,您甚至可以将它们放在单独的行上,以帮助防止它变成大块。这是我的一个项目中的一些真正的 javascript jQuery 代码:

incident
   .wireUp($('div.incidents div.incident'))
   .find('input:data(focus)')
   .first()
   .focus()
   .filter(':data(select)')
   .trigger('select');

我希望这可以更清楚地说明为什么可以将不同的功能链接在一起。

另外,值得一提的是,Javascript 有函数,虽然是的,它们是方法,但我们通常不这样称呼它们。

【讨论】:

  • 谢谢伙计,我现在完全明白这一切是如何运作的了。非常感谢您花时间和精力以如此出色的方式解释它。
【解决方案2】:

关于链接和表达式的一点点

您似乎对chaining 的方法感到困惑,尤其是返回对象的方法。由于每个方法都返回一个值,因此它是一个引用该值的expression,无论是对象还是字符串。

下面的示例避免了方法的链接,并将您自己的示例分解为分配给变量的表达式。

您的代码的非链接版本

$ 是一个获取参数"input[name=dateAccessed]" 并返回jQuery 对象的函数。您可以像在示例中一样直接引用结果对象,也可以将其分配给变量。

例如:

var jquery_field_object = $("input[name=dateAccessed]");

同样,datepickerjQuery 对象的一个​​方法,它获取参数'getDate' 并返回一个Date 对象。您可以再次直接引用结果对象或将其分配给变量。

例如:

var date_object = jquery_field_object.datepicker('getDate');

以类似的方式,getFullYear()Date 对象的一个​​方法。所以完整的未链接示例将显示为:

var jquery_field_object = $("input[name=dateAccessed]");
var date_object         = jquery_field_object.datepicker('getDate');
var year                = date_object.getFullYear();

【讨论】:

    猜你喜欢
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 2021-09-30
    • 1970-01-01
    相关资源
    最近更新 更多