【问题标题】:jQuery objects and elementsjQuery 对象和元素
【发布时间】:2016-02-01 01:59:16
【问题描述】:

我知道我以前看过一个类似问题的漂亮直接的答案,但我无法记住或找到它,所以提前道歉。

我对编码并不陌生,但我没有接受过 Javascript/jQuery 的正式培训。我使用的其他所有内容都经过严格输入,所以我仍在为 JS 如何输入而苦苦挣扎。我有一个函数,每次更改特定类的子级时都会触发(我正在为 Sharepoint 编写此代码,因此需要解决一些问题。)

为什么会这样写:

$(".listen *").change(function(event) {

        var element = event.target;

        if (element.title == 'Workstation')) {
             alert(element.val());
        }
    }

我收到一个错误,指出 .val() 不是函数,我必须改写

 $(".listen *").change(function(event) {

        var element = event.target;

        if (element.title == 'Workstation')) {
             alert($('#' + element.id).val());
        }
     }

“元素”所指的对象和使用id检索到的对象有什么区别?它们不是 jQuery 对象吗?我意识到并非所有由我的函数返回的对象实际上都可能有返回值,但我不明白如何进行区分。

谢谢!

【问题讨论】:

  • element 指的是一个 DOM 对象,而将其包装在 $ 中使其成为类似于 $(element) 的 jQuery 对象。而.val() 是 jQuery 提供的 API,而不是 DOM 提供的 API。
  • 正如其他人所说,它需要 $ 是一个 jQuery 对象。您可能会考虑使用 $(this) 访问数据,因为您将评估单击元素的 jQuery 对象。只是一个想法。

标签: javascript jquery types


【解决方案1】:

在您的第一个代码块中,“元素”变量不是 jQuery 对象,而是 DOM 对象。 .val() 方法没有为 DOM 对象定义。它只为 jQuery 对象定义。

在您的第二个代码块中,$('#' .element.id) 返回一个定义了 val() 方法的 jQuery 对象。

所以回答你的问题,不,它们不是两个 jQuery 对象,只有第二个是。

【讨论】:

  • 我现在可以添加 cmets 了!这真的帮助了我。谢谢!!
【解决方案2】:

你必须像这样从你的 dom (event.target) 中创建 jQuery 对象;

$(".listen *").change(function(event) {

    var element = $(event.target);

    if (element.attr('title') == 'Workstation')) {
         alert(element.val());
    }
}

然后您可以根据需要使用您的 jQuery 对象。顺便说一句,如果你想捕捉改变的元素,你可以使用$(this)而不是$(event.target)

$(".listen *").change(function(event) {

    var element = $(this);

    if (element.attr('title') == 'Workstation')) {
         alert(element.val());
    }
}

【讨论】:

    猜你喜欢
    • 2011-10-21
    • 2013-12-18
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多