1

次の規則を使用して、値のブール値/文字列を返すことはできません。

http://jsfiddle.net/eQWyY/

<input id="lol" type="text" value="ahh" />

<script>
function test() {
    var flag = false;
    if ($('#lol').val()) {
        alert($('#lol').val()); //"sanity check - pass"
        flag = true;
    }
    return flag;
};

function modal() {};
var m = new modal();

modal.prototype.init = function(x) {
    this.input = x;
    this.modals = {};
    this.initModalFrames();
    this.executeLogic();
}

modal.prototype.initModalFrames = function() {
    for (i in this.input) {
        this.modals[i] = {
            handle :    this.input[i].handle,
            frame :     this.input[i].frame,
            logic :     this.input[i].logic ? this.input[i].logic : null
        };
    }
}

modal.prototype.executeLogic= function() {
    var s = this;
    $.each(this.modals, function(i, o) {
        if(s.modals[i].logic != null) {
            var x = s.modals[i].logic.call();
            if(x) {
                alert('true');
            }
            else {
                //Always evaluates to false
                alert('false');
            }
        }
    });
}

m.init([
      {handle: '#handle1', frame: '#frame2', logic: function() {test();}},
]);

</script>

関数は何も返さないようで、常に false と評価されます。ここで何が間違っていますか?

4

1 に答える 1

3

ハンドラーは実行logic結果を返す必要があります。test

{ handle: '#handle1', frame: '#frame2', logic: function() { return test(); } }

またはより簡単:

{ handle: '#handle1', frame: '#frame2', logic: test }

デモ: http://jsfiddle.net/eQWyY/1/

于 2012-11-14T18:03:11.500 に答える