Javascript 基于用户输入的返回值

Javascript 基于用户输入的返回值,javascript,jquery,Javascript,Jquery,使用jQuery(1.7),而不是jQueryUI-(如何)可以完成以下任务 调用函数1 在函数1中,定义了一个变量并将其设置为 职能2的成果 调用函数2“动态”时,如果 单击第一个按钮,返回值“true”,第二个按钮返回值“false” 在函数1中,设置为函数2的结果的变量应等待用户输入并返回值 然后应评估该值 在jQuery中有没有办法不使用间隔/超时等来继续查找设置为用户输入的中间值 我概述了以下原则: function function1(){ var myVariable

使用jQuery(1.7),而不是jQueryUI-(如何)可以完成以下任务

  • 调用函数1
  • 在函数1中,定义了一个变量并将其设置为 职能2的成果
  • 调用函数2“动态”时,如果 单击第一个按钮,返回值“true”,第二个按钮返回值“false”
  • 在函数1中,设置为函数2的结果的变量应等待用户输入并返回值
  • 然后应评估该值
在jQuery中有没有办法不使用间隔/超时等来继续查找设置为用户输入的中间值

我概述了以下原则:

function function1(){

    var myVariable=function2;
    // nothing should happen at this point until function2 has returned a response
    if(myVariable){
        alert('true');
    }else{
        alert('false');
    }
}


function function2(){

    var yesbutton=$("<input type='submit' value='yes' />");
    var nobutton=$("<input type='submit' value='no' />");
    $('body').append(yesbutton)
    $('body').append(nobutton)
    nobutton.click(function(){
        return false;
    });
    yesbutton.click(function(){
        return true;
    });

}


function1();
函数function1(){
var myVariable=function2;
//在function2返回响应之前,此时不应发生任何事情
if(myVariable){
警报(“真”);
}否则{
警报(“假”);
}
}
函数function2(){
var yesbutton=$(“”);
var nobutton=$(“”);
$('body').append(是按钮)
$('body').append(nobutton)
nobutton.click(函数(){
返回false;
});
yesbutton.单击(函数(){
返回true;
});
}
功能1();

一如既往,非常感谢您的帮助

您不能这样做,因为function2已经执行,并且
click
处理程序中
function2
的返回值将不是它的返回值。但您可以使用一个函数来实现它

function function1(){

    var yesbutton=$("<input type='submit' value='yes' />");
    var nobutton=$("<input type='submit' value='no' />");
    $('body').append(yesbutton)
    $('body').append(nobutton)
    nobutton.click(function(){
        alert('false');
    });
    yesbutton.click(function(){
        alert('true');
    });

}
函数function1(){
var yesbutton=$(“”);
var nobutton=$(“”);
$('body').append(是按钮)
$('body').append(nobutton)
nobutton.click(函数(){
警报(“假”);
});
yesbutton.单击(函数(){
警报(“真”);
});
}
或者你也可以这样做

function function2(yesClickHandler, noClickHandler){
    var deferred = $.Deferred();

    var yesbutton=$("<input type='submit' value='yes' />");
    var nobutton=$("<input type='submit' value='no' />");
    $('body').append(yesbutton).append(nobutton);

    nobutton.click(noClickHandler);
    yesbutton.click(yesClickHandler);

    return deferred.promise();

}

function2(function(){
   alert('true');
}, function(){
   alert('false');
});
函数2(yesClickHandler、noClickHandler){
var deferred=$.deferred();
var yesbutton=$(“”);
var nobutton=$(“”);
$('body').append(yesbutton).append(nobutton);
单击(noClickHandler);
yesbutton.单击(yesClickHandler);
延迟返回。承诺();
}
函数2(函数(){
警报(“真”);
},函数(){
警报(“假”);
});

这是可能的,只是可能不是你期望的那样

function function1(){

    var myVariable=function2();
    // nothing should happen at this point until function2 has returned a response
    myVariable.done(function(){
        alert('true');
    }).fail(function(){
        alert('false');
    });
}


function function2(){
    var deferred = $.Deferred();

    var yesbutton=$("<input type='submit' value='yes' />");
    var nobutton=$("<input type='submit' value='no' />");
    $('body').append(yesbutton)
    $('body').append(nobutton)
    nobutton.click(deferred.reject);
    yesbutton.click(deferred.resolve);

    return deferred.promise().always(function(){
        yesbutton.add(nobutton).remove();
    });

}


function1();
函数function1(){
var myVariable=function2();
//在function2返回响应之前,此时不应发生任何事情
myVariable.done(函数(){
警报(“真”);
}).fail(函数(){
警报(“假”);
});
}
函数function2(){
var deferred=$.deferred();
var yesbutton=$(“”);
var nobutton=$(“”);
$('body').append(是按钮)
$('body').append(nobutton)
nobutton.click(延迟.拒绝);
是按钮。单击(延迟。解决);
return deferred.promise().always(函数()){
添加(nobutton.remove();
});
}
功能1();

在功能1中使用此选项:

var myVariable=function2();

您可以通过回调来实现它。然而,在理想情况下,最好利用事件机制,在该机制中侦听并触发事件来更新变量,但是对于这个简单的示例,这需要付出更多的努力

function function1(){
    function2(function(myVariable){
        if(myVariable){
            alert('true');
        }else{
            alert('false');
        }
    };
}


function function2(callback){

    var yesbutton=$("<input type='submit' value='yes' />");
    var nobutton=$("<input type='submit' value='no' />");
    $('body').append(yesbutton)
    $('body').append(nobutton)
    nobutton.click(function(){
        callback(false);
    });
    yesbutton.click(function(){
        callback(true);
    });
}

function1();
函数function1(){
函数2(函数(myVariable){
if(myVariable){
警报(“真”);
}否则{
警报(“假”);
}
};
}
函数2(回调){
var yesbutton=$(“”);
var nobutton=$(“”);
$('body').append(是按钮)
$('body').append(nobutton)
nobutton.click(函数(){
回调(假);
});
yesbutton.单击(函数(){
回调(true);
});
}
功能1();

用户输入是异步的,除非您使用模式对话框,如
提示符
确认
,或
显示模态对话框
。否则您必须使用回调。如何实现回调?@ErgoSummary Shankar的解决方案使用回调。好吧,等等。事实上,但是让函数2旋转的原因是什么另外,它可以在其他地方重新调整用途-可能还有其他类似于函数1的函数出现…在这种情况下,您可以将回调传递给函数2并使用它。谢谢-看得更近一些,凯文建议的延迟选项确实有效-我对传递“是/否”单击处理程序很感兴趣?我认为这个解决方案比不同的sol更好注意。您可以同时多次重复使用它。您也可以同时多次使用我的,因为每次使用它时它都会创建一个新的延迟对象。我唯一不喜欢的是我的回调名为
done
fail
,而不是
yes
no
,这使得我它的可读性有点差。