Jquery $(this) 范围错误
Jquery $(this) wrong scope
我有问题,也许我会得到帮助。
我有一个导航,当我点击导航点时,我想从点击的导航点获取 ID。
我的问题是,我没有用 $(this) 取回 ID。我把整个 index.js 都拿回来了。
疯狂的是,当我使用以下代码片段执行此操作时,它起作用了。
但这不是我最喜欢的方式。我喜欢第二种方式,因为它更干净。
$('.menuContent p').on('click', function () {
var clickedMenuEntry = $(this).attr('id');
switch (clickedMenuEntry) {
case 'yourData': yourDataSite();
break;
}
});
这里开始无效的方式。
<div class="col-md-6 menuContent">
<p id="yourData"><i class="fa fa-user"></i>Deine Daten</p>
<p id="yourSuccess"><i class="fa fa-trophy"></i>Deine Erfolge</p>
<p id="surveys"><i class="fa fa-comments"></i>Umfragen</p>
<p id="yourMatches"><i class="fa fa-calendar"></i>Turniere an denen du teilnimmst</p>
<p id="money"><i class="fa fa-money"></i>Jahresbeitrag / Budget</p>
<p id="yourStatics"><i class="fa fa-line-chart"></i>Statistik</p>
</div>
(function () {
"use strict";
document.addEventListener('deviceready', onDeviceReady.bind(this), false);
function onDeviceReady() {
// Verarbeiten der Cordova-Pause- und -Fortsetzenereignisse
document.addEventListener('pause', onPause.bind(this), false);
document.addEventListener('resume', onResume.bind(this), false);
$('.appIsLoading').remove();
bindEvents();
};
/*
* @return {void}
*/
function bindEvents() {
var $body = $('body');
$body.on('click', '.menu', showAndHideNavigation);
$body.on('click', '.menuContent p', switchToRequestedSite);
}
/*
* @return {void}
*/
function showAndHideNavigation() {
var $menuContent = $('.menuContent');
var statusOfMenuContent = parseInt($('.menuContent').css('left'));
if (statusOfMenuContent < 0) {
$menuContent.css('left', '0%');
} else {
$menuContent.css('left', '-78%');
}
}
/*
* @return {String}
*/
function getClickedNavigationEntry() {
return $(this).attr('id');
}
/*
* @return {void}
*/
function switchToRequestedSite() {
var clickedMenuEntry = getClickedNavigationEntry();
switch (clickedMenuEntry) {
case 'yourData': yourDataSite();
break;
}
}
我会建议这样的事情
function bindEvents() {
var $body = $('body');
$body.on('click', '.menu', showAndHideNavigation);
$body.on('click', '.menuContent p', function(){
switchToRequestedSite($(this));
});
}
/*
* @return {void}
*/
function showAndHideNavigation() {
var $menuContent = $('.menuContent');
var statusOfMenuContent = parseInt($('.menuContent').css('left'));
if (statusOfMenuContent < 0) {
$menuContent.css('left', '0%');
} else {
$menuContent.css('left', '-78%');
}
}
/*
* @return {void}
*/
function switchToRequestedSite(clickedMenuEntry ) {
switch (clickedMenuEntry) {
case 'yourData': yourDataSite();
break;
}
}
getClickedNavigationEntry()
在 switchToRequestedSite()
内部调用时不继承 this
可以使用 bind()
或仅将元素作为参数传递以提高可读性
function switchToRequestedSite() {
// pass element to fn
var clickedMenuEntry = getClickedNavigationEntry(this);
// or much simpler
var clickedMenuEntry = this.id;
switch (clickedMenuEntry) {
case 'yourData':
yourDataSite();
break;
}
}
function getClickedNavigationEntry(el) {
return el.id;
}
不确定为什么你需要一个函数来 return 一个元素 ID
我有问题,也许我会得到帮助。
我有一个导航,当我点击导航点时,我想从点击的导航点获取 ID。
我的问题是,我没有用 $(this) 取回 ID。我把整个 index.js 都拿回来了。
疯狂的是,当我使用以下代码片段执行此操作时,它起作用了。 但这不是我最喜欢的方式。我喜欢第二种方式,因为它更干净。
$('.menuContent p').on('click', function () {
var clickedMenuEntry = $(this).attr('id');
switch (clickedMenuEntry) {
case 'yourData': yourDataSite();
break;
}
});
这里开始无效的方式。
<div class="col-md-6 menuContent">
<p id="yourData"><i class="fa fa-user"></i>Deine Daten</p>
<p id="yourSuccess"><i class="fa fa-trophy"></i>Deine Erfolge</p>
<p id="surveys"><i class="fa fa-comments"></i>Umfragen</p>
<p id="yourMatches"><i class="fa fa-calendar"></i>Turniere an denen du teilnimmst</p>
<p id="money"><i class="fa fa-money"></i>Jahresbeitrag / Budget</p>
<p id="yourStatics"><i class="fa fa-line-chart"></i>Statistik</p>
</div>
(function () {
"use strict";
document.addEventListener('deviceready', onDeviceReady.bind(this), false);
function onDeviceReady() {
// Verarbeiten der Cordova-Pause- und -Fortsetzenereignisse
document.addEventListener('pause', onPause.bind(this), false);
document.addEventListener('resume', onResume.bind(this), false);
$('.appIsLoading').remove();
bindEvents();
};
/*
* @return {void}
*/
function bindEvents() {
var $body = $('body');
$body.on('click', '.menu', showAndHideNavigation);
$body.on('click', '.menuContent p', switchToRequestedSite);
}
/*
* @return {void}
*/
function showAndHideNavigation() {
var $menuContent = $('.menuContent');
var statusOfMenuContent = parseInt($('.menuContent').css('left'));
if (statusOfMenuContent < 0) {
$menuContent.css('left', '0%');
} else {
$menuContent.css('left', '-78%');
}
}
/*
* @return {String}
*/
function getClickedNavigationEntry() {
return $(this).attr('id');
}
/*
* @return {void}
*/
function switchToRequestedSite() {
var clickedMenuEntry = getClickedNavigationEntry();
switch (clickedMenuEntry) {
case 'yourData': yourDataSite();
break;
}
}
我会建议这样的事情
function bindEvents() {
var $body = $('body');
$body.on('click', '.menu', showAndHideNavigation);
$body.on('click', '.menuContent p', function(){
switchToRequestedSite($(this));
});
}
/*
* @return {void}
*/
function showAndHideNavigation() {
var $menuContent = $('.menuContent');
var statusOfMenuContent = parseInt($('.menuContent').css('left'));
if (statusOfMenuContent < 0) {
$menuContent.css('left', '0%');
} else {
$menuContent.css('left', '-78%');
}
}
/*
* @return {void}
*/
function switchToRequestedSite(clickedMenuEntry ) {
switch (clickedMenuEntry) {
case 'yourData': yourDataSite();
break;
}
}
getClickedNavigationEntry()
在 switchToRequestedSite()
this
可以使用 bind()
或仅将元素作为参数传递以提高可读性
function switchToRequestedSite() {
// pass element to fn
var clickedMenuEntry = getClickedNavigationEntry(this);
// or much simpler
var clickedMenuEntry = this.id;
switch (clickedMenuEntry) {
case 'yourData':
yourDataSite();
break;
}
}
function getClickedNavigationEntry(el) {
return el.id;
}
不确定为什么你需要一个函数来 return 一个元素 ID