我试图在一个带有嵌套函数的函数内声明一个var var origPage;
(不是嵌套函数,而是外部函数),但由于某种原因它没有注册。
function noticeSearch() {
var origPage = null;
$(".srh-input").keyup(function(e) {
var e = e || event;
keycode = e.which || e.keyCode;
var keyword = $(".srh-input").val();
console.log(origPage);
console.log(currentPage);
if ((e.which == 8) && (keyword === "")) {
currentPage = origPage;
} else if (keyword === "") {
tooltip(".srh-input", "请输入关键字查询");
origPage = currentPage;
} else {
$(".srh-input").tooltip('destroy');
currentPage = 1;
}
$("#srh-btn").trigger("click");
});
$("#srh-btn").on("click", function() {
notice.findList();
});
}
当我运行它时,它表示变量origPage在我的控制台中是未定义的。我的keyword === ""
一开始总是返回true,因此origPage应设置为我所在的任何页面,但事实并非如此。我无法在我的keyup函数中声明它,因为我不想在每次按键后将我的变量重置为undefined。我不允许在包装函数中声明变量吗?
编辑:currentPage已经定义。很抱歉没事先提及。
我现在遇到了一个新问题。一旦我将origPage的值更改为null,我的其他代码似乎都没有运行。我会尽力解决这个问题。
答案 0 :(得分:0)
无论currentPage是否先前已定义,它都会在您声明它的函数范围内丢失(除非您在窗口中定义了它)。设置origPage = currentPage时,您将在与定义currentPage不同的范围内进行分配。请注意,您正在将回调函数传递给keyup函数,该函数不具有您假设的本地作用域。使currentPage成为全局变量可能会解决此问题。
答案 1 :(得分:0)
我认为你的问题更多地归结为问题逻辑
var currentPage = 1;
function noticeSearch() {
var origPage = null;
$(".srh-input").keyup(function (e) {
var e = e || event;
keycode = e.which || e.keyCode;
var keyword = $(".srh-input").val();
console.log('orig page is : ' + origPage);
if ((e.which == 8) && (keyword === "")) {
currentPage = origPage;
console.log('case 1');
} else if (keyword === " ") {
//tooltip(".srh-input", "请输入关键字查询");
origPage = currentPage;
console.log('orig page is set to: ' + origPage);
console.log('case 2');
} else {
//$(".srh-input").tooltip('destroy');
currentPage = 1;
console.log('case 3');
}
$("#srh-btn").trigger("click");
});
$("#srh-btn").on("click", function () {
notice.findList();
});
}
noticeSearch();
使用此代码我可以获得origPage
的值来记录就好了。只需按一次空格即可进入第一个else if
https://jsfiddle.net/fzw8xv5b/3/
你的问题是这个
if ((e.which == 8) && (keyword === "")) {
currentPage = origPage;
} else if (keyword === "") {
tooltip(".srh-input", "请输入关键字查询");
origPage = currentPage;
即检查退格按钮是否按下且输入为空。否则检查输入是否为空。除了退格键之外,该行可能永远不会被调用为导致键盘输入为空的原因?
答案 2 :(得分:0)
另一个解决方案:你的keyup函数不知道origPage,因为它是一个事件处理程序,而且是因为闭包。或者,您可以传递它在此处使用的数据。
function noticeSearch(){
var origPage = null;
$(".srh-input").on('keyup', {origPage: origPage}, function(e) {
var e = e || event;
keycode = e.which || e.keyCode;
var keyword = $(".srh-input").val();
console.log(origPage);
console.log(currentPage);
if ((e.which == 8) && (keyword === "")) {
currentPage = origPage;
} else if (keyword === "") {
tooltip(".srh-input", "请输入关键字查询");
origPage = currentPage;
} else {
$(".srh-input").tooltip('destroy');
currentPage = 1;
}
$("#srh-btn").trigger("click");
});
$("#srh-btn").on("click", function() {
notice.findList();
});
}
希望这有帮助。
答案 3 :(得分:-1)
将声明置于noticeSearch()
之外并使其成为全局声明:
var origPage = null;
function noticeSearch() {
//....
}
我不确定这是否是最好的方法,但它肯定会有用。