无法从提示中获取变量作为回调函数

cannot get a variable from a prompt as a callback function

button右击我需要:
- 隐藏按钮
- 然后 显示提示
- 写入提示值
- 在控制台中获取值

function a_ren(){
 var a = 'lorem';
 $('.cmenu').hide(function(){var res = prompt('RENAME', a);});
 console.log(res);
}

$(document).on('contextmenu', 'button', function(e){
    e.preventDefault();
    a_ren();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button class='cmenu'>CLICK</button>

两个问题:
- 控制台错误 - res 未定义
- 在 SO 上出现提示 window,但在我的页面上(chromelocalhost)提示 window 根本没有出现。

有什么帮助吗?

未定义res的原因是因为传递给hide()的函数直到隐藏动画完成后才运行但不等待就调用console.log(res); .此外,正如 Ram Segev 指出的那样,res 是在 hide 回调函数中定义的,因此这是它在范围内(可访问)的唯一位置。

至于没有出现提示,换个试试

$(document).on('contextmenu', 'button', function(e){

document.querySelector('button').addEventListener('contextmenu', (e) => {

res 未定义,因为您在 hide 函数内声明它并尝试在它之外(不在范围内)打印它。把console log放到函数里面应该可以解决

function a_ren(){
 var a = 'lorem';
 $('.cmenu').hide(function(){
    var res = prompt('RENAME', a);
    console.log(res);
  });
}

$(document).on('contextmenu', 'button', function(e){
    e.preventDefault();
    a_ren();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button class='cmenu'>CLICK</button>

问题是 var res 的范围在 hide complete 回调内部,即使你在函数外声明 res 你也不会从提示中获取值,因为 hide complete 回调是异步的,所以你必须在回调本身处理提示结果,参考下面的代码

function a_ren() {
 var a = 'lorem';
 $('.cmenu').hide(function () {
  var res = prompt('RENAME', a);
  process_prompt_result(res);
        // scope of res ends here, its undefined outside this function
 });
}

$(document).on('contextmenu', 'button', function (e) {
 e.preventDefault();
 a_ren();
});

function process_prompt_result(result) {
 // do something thing with result value from prompt
 console.log(result);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button class='cmenu'>CLICK</button>