无法使 (this) jQuery 选择器工作
Can't get (this) jQuery selector working
我的页面上有一个名为 "a.add_mycrate" 的重复 class。
此脚本仅针对单击的实例 (this) 并对其进行处理。
这是我的 JS :
jQuery(document).ready(function(){
jQuery(document).on('click', "a.add_mycrate", function(event) {
event.preventDefault();
var title = jQuery(this).attr('data-title');
var artwork = jQuery(this).attr('data-artwork');
var stream = jQuery(this).attr('data-stream');
var download = jQuery(this).attr('data-download');
var data = {
'action': 'addToCrate',
'security': jQuery( '#crate-nonce' ).val(),
'podtitle' : title,
'podartwork' : artwork,
'podstream' : stream,
'podsave' : download
};
jQuery.post(myCrate.ajaxurl, data, function(response) {
jQuery('a.add_mycrate', this).html(response);
alert(response);
});
});
});
这是实际链接在页面上的呈现方式(以防有帮助):
<a class="add_mycrate" href="#" data-title="Title Goes Here" data-artwork="artwork.jpg" data-stream="myfile.mp3" data-download="link/to/download">Add To Crate</a>
(this) 选择器在为 vars 抓取数据时工作正常,但我无法在对 "a.add_mycrate" 的目标 (this) 实例的响应中获取代码。这是我遇到问题的行:
jQuery('a.add_mycrate', this).html(response);
我知道我一定是做错了,但我在这里环顾四周尝试过的所有方法都不起作用。有什么建议吗?
P.S。与问题无关,但我使用 "jQuery" 而不是“$”,因为它在 wordpress 网站上是 运行 以防有人想知道。
几个问题:
$.post
回调中的 this
不是你想的那样。它与外部事件处理程序中的 this
具有不同的范围上下文。
在 ajax 之外存储对 this
的引用以在其中使用
var $this = jQuery(this);
jQuery.post(myCrate.ajaxurl, data, function(response) {
$this.html(response);
});
这也将解决以下问题:
jQuery('a.add_mycrate', this).html(response);
第二个参数是"context"。如果您假设 this
是元素,则上下文参数使其与 :
相同
jQuery(this).find('a.add_mycrate');
所以你会在自身内部寻找元素。这两个问题都通过将元素引用存储在 ajax 之外并将 html 直接插入存储的元素
来解决
编辑:如何在 wordpress noConflict() 中使用 $ 而不是必须对所有内容使用 jQuery
:
jQuery(document).ready(function($){
// can use `$` for all your code inside the ready handler
// when you pass it in as argument
})
将this
放在post
之前的一个名为elm
的变量中,然后像下面这样更改elm
的html。
jQuery(document).ready(function(){
jQuery(document).on('click', "a.add_mycrate", function(event) {
event.preventDefault();
var title = jQuery(this).attr('data-title');
var artwork = jQuery(this).attr('data-artwork');
var stream = jQuery(this).attr('data-stream');
var download = jQuery(this).attr('data-download');
var elm = this;
var data = {
'action': 'addToCrate',
'security': jQuery( '#crate-nonce' ).val(),
'podtitle' : title,
'podartwork' : artwork,
'podstream' : stream,
'podsave' : download
};
jQuery.post(myCrate.ajaxurl, data, function(response) {
jQuery(elm).html(response);
alert(response);
});
});
});
我的页面上有一个名为 "a.add_mycrate" 的重复 class。 此脚本仅针对单击的实例 (this) 并对其进行处理。
这是我的 JS :
jQuery(document).ready(function(){
jQuery(document).on('click', "a.add_mycrate", function(event) {
event.preventDefault();
var title = jQuery(this).attr('data-title');
var artwork = jQuery(this).attr('data-artwork');
var stream = jQuery(this).attr('data-stream');
var download = jQuery(this).attr('data-download');
var data = {
'action': 'addToCrate',
'security': jQuery( '#crate-nonce' ).val(),
'podtitle' : title,
'podartwork' : artwork,
'podstream' : stream,
'podsave' : download
};
jQuery.post(myCrate.ajaxurl, data, function(response) {
jQuery('a.add_mycrate', this).html(response);
alert(response);
});
});
});
这是实际链接在页面上的呈现方式(以防有帮助):
<a class="add_mycrate" href="#" data-title="Title Goes Here" data-artwork="artwork.jpg" data-stream="myfile.mp3" data-download="link/to/download">Add To Crate</a>
(this) 选择器在为 vars 抓取数据时工作正常,但我无法在对 "a.add_mycrate" 的目标 (this) 实例的响应中获取代码。这是我遇到问题的行:
jQuery('a.add_mycrate', this).html(response);
我知道我一定是做错了,但我在这里环顾四周尝试过的所有方法都不起作用。有什么建议吗?
P.S。与问题无关,但我使用 "jQuery" 而不是“$”,因为它在 wordpress 网站上是 运行 以防有人想知道。
几个问题:
$.post
回调中的 this
不是你想的那样。它与外部事件处理程序中的 this
具有不同的范围上下文。
在 ajax 之外存储对 this
的引用以在其中使用
var $this = jQuery(this);
jQuery.post(myCrate.ajaxurl, data, function(response) {
$this.html(response);
});
这也将解决以下问题:
jQuery('a.add_mycrate', this).html(response);
第二个参数是"context"。如果您假设 this
是元素,则上下文参数使其与 :
jQuery(this).find('a.add_mycrate');
所以你会在自身内部寻找元素。这两个问题都通过将元素引用存储在 ajax 之外并将 html 直接插入存储的元素
来解决编辑:如何在 wordpress noConflict() 中使用 $ 而不是必须对所有内容使用 jQuery
:
jQuery(document).ready(function($){
// can use `$` for all your code inside the ready handler
// when you pass it in as argument
})
将this
放在post
之前的一个名为elm
的变量中,然后像下面这样更改elm
的html。
jQuery(document).ready(function(){
jQuery(document).on('click', "a.add_mycrate", function(event) {
event.preventDefault();
var title = jQuery(this).attr('data-title');
var artwork = jQuery(this).attr('data-artwork');
var stream = jQuery(this).attr('data-stream');
var download = jQuery(this).attr('data-download');
var elm = this;
var data = {
'action': 'addToCrate',
'security': jQuery( '#crate-nonce' ).val(),
'podtitle' : title,
'podartwork' : artwork,
'podstream' : stream,
'podsave' : download
};
jQuery.post(myCrate.ajaxurl, data, function(response) {
jQuery(elm).html(response);
alert(response);
});
});
});