0

さて、トリガーが機能しないことに関する他のすべての質問に目を通しました。私の質問は、私が信じている他の質問とは少し違うと思います。

私はこれをdivのクリックをリッスンしています:

$(".switch").click(function(){
    var state = ( $(this).children('.b1').is('.btn-success') ? 0 : 1 );
    $(this).attr('data-state', state  );
    $(this).children('.b1').toggleClass('btn-success');
    $(this).children('.b0').toggleClass('btn-danger');
    $(this).trigger('stateChanged', state);
});

下部にあるイベントをトリガーしようとしていることに注意してくださいstateChanged。ドキュメントの準備ができたら、この関数を実行します...

function data_depends(){
    var key_name = urlName();
    $(document).find('[data-depends]').each(function(index){
        var depends = $(this).data("depends").split(", ");
        if(depends != null)
            if(depends[1] == "state"){
                if($(depends[0]).data("state") == "0")
                    $(this).show(500);
                else
                    $(this).hide(500);
                var a = this;
                $(depends[0]).bind("stateChanged", 
                            function(x){if(x) $(a).show(500); 
                                        else $(a).hide(500);});
            }
    });
}

私が持っているその機能に注意してください...

$(depends[0]).bind("stateChanged", function(x){if(x) $(a).show(500);
else $(a).hide(500);});

しかし、関数は決して呼び出されません。

ここにhtmlがあります

<div class="control-group">
    <label class="control-label" for="sale">Outcome</label>
    <div class="controls">
        <div id="sale" class="btn-group switch" data-toggle="buttons-radio" data-state="0" data-persist>
            <button type="button" class="btn b1">Sale</button>
            <button type="button" class="btn b0 btn-danger">No Sale</button>
        </div>
    </div>
</div>
<div class="control-group" data-depends="#sale, state">
    <label class="control-label" for="reason">No sale reason</label>
    <div class="controls">
        <input id="reason" type="text" placeholder="No sale reason" data-persist ><br>
    </div>
</div>
4

2 に答える 2

1

関数のシグネチャは、最初の引数としてイベントを取る必要があります。

$(depends[0]).bind("stateChanged", 
    function(evt, x) { // <-- here add "evt" as first argument
        if(x) $(a).show(500);
        else $(a).hide(500);
});
于 2013-01-03T22:28:59.827 に答える
0

したがって、ここでこの質問に戻ります: https://superuser.com/questions/527761/javascript-being-cached-in-chrome

できるときもあれば、できないときもあります。

したがって、スイッチに依存する入力フィールドを使用したい人のために.....

PS。jquery とブートストラップが必要です。


javascript

$(".switch").click(function(){
    var state = ( $(this).children('.b1').is('.btn-success') ? 0 : 1 );
    $(this).attr('data-state', state  );
    $(this).children('.b1').toggleClass('btn-success');
    $(this).children('.b0').toggleClass('btn-danger');
    $(this).trigger('stateChanged', state);
    //$("#" + this.id).trigger('stateChanged', state);
});

function data_depends(){
    var key_name = urlName();
    $(document).find('[data-depends]').each(function(index){
        var depends = $(this).data("depends").split(", ");
        if(depends != null)
            if(depends[1] == "!state"){
                var a = this;
                $(depends[0]).bind("stateChanged", function(evt, x){if(!x) {$(a).show(500);}else{ $(a).hide(500);}});
            }else if(depends[1] == "!state"){
                var a = this;
                $(depends[0]).bind("stateChanged", function(evt, x){if(x) {$(a).show(500);}else{ $(a).hide(500);}});
            }

    });
}

$(document).ready(function(e) {
    data_depends();
    $(".switch").trigger('stateChanged', 0);
});

html

<div class="control-group">
    <label class="control-label" for="sale">Outcome</label>
    <div class="controls">
        <div id="sale" class="btn-group switch" data-toggle="buttons-radio" data-state="0" data-persist>
            <button type="button" class="btn b1">Sale</button>
            <button type="button" class="btn b0 btn-danger">No Sale</button>
        </div>
    </div>
</div>
<div class="control-group" data-depends="#sale, state">
    <label class="control-label" for="reason">No sale reason</label>
    <div class="controls">
        <input id="reason" type="text" placeholder="No sale reason" data-persist ><br>
    </div>
</div>
于 2013-01-03T22:22:06.647 に答える