根据用户输入返回值

Return value based on user input

本文关键字:返回值 输入 用户      更新时间:2023-09-26

使用jQuery(1.7)而不是jQueryUI-(如何)可以实现以下内容?

  • 调用函数1
  • 在函数1中,定义了一个变量,并将其设置为功能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();

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

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

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();

您可以在回调的帮助下实现它。然而,在理想的情况下,最好利用事件机制来监听和触发事件以更新变量,但对于这个简单的例子来说,这需要付出更多的努力。

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();

您不能这样做,因为函数2已经执行,并且function2内部的click处理程序的返回值将不是它的返回值。但您只需使用一个功能即可实现。

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');
    });
}

或者你也可以这样做。

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');
});

在函数1:中使用此函数

var myVariable=function2();