0

関数があります(200行以上のコード)。ページの読み込み中または一部のクリック イベント中に実行される可能性があります。関数がページの読み込み時に実行されるかどうかを判断するにはどうすればよいでしょうか?

以下は簡単なテストコードです。http://jsfiddle.net/EjcTk/にも保存してください、ありがとう。

<script>
jQuery(document).ready(function(){
    function ABC() {
        //many code here
        if(someelse===undefined){
                           //if by click, do some code.
                           //if by page loading, do not run these code.
            alert('ok');//check if it works.
        }
    }
    $(document).ready(function() {
        var someelse = 1;
                  ABC();                   
    });
    $('#click').click(function() {
        ABC();
    });
});
</script>
<div id="click">test</div>
4

4 に答える 4

1

これを試してくださいhttp://jsfiddle.net/EjcTk/2/

var someelse = 0;

$(document).ready(function() {
    someelse = 0;

    ABC();
});
$('#click').click(function() {
    someelse = 1;
    ABC();
});
function ABC() {
    if (someelse == 0) {
        alert('onload');
    } else alert('onclick');
}​
于 2012-09-25T17:29:17.547 に答える
1

Pass boolean argument関数内で、ロード時に呼び出されたのか、他の場所から呼び出されたのかを知る

jQuery(document).ready(function(){
    function ABC(isOnLoad) {
        //many code here
        if(isOnLoad){
                           //if by click, do some code.
                           //if by page loading, do not run these code.
            alert('ok');//check if it works.
        }
    }
    $(document).ready(function() {

                  ABC(true);                   
    });
    $('#click').click(function() {
        ABC(false);
    });
});
于 2012-09-25T17:32:06.030 に答える
1

これを試して:

 function ABC(status) {
    //many codes here
    if(status==='click'){
        //if by click, do some code.
        //if by page loading, do not run these code.
        alert('ok');//check if it works.
    }
}
$(document).ready(function() {
    ABC('default');                   
});
$('#click').click(function() {
    ABC('click');
});

</p>

于 2012-09-25T17:30:53.137 に答える
0

クリックハンドラーの設定方法によっては、次のようなことができます。

if(this===window)
    //it's running in page load
else
    //it's being run as a click handler

これが機能しないシナリオがいくつかあります。たとえば、this手動で変更した場合や、クリックハンドラーが次のように設定されている場合です。

<a href="#" onclick = "ABC()">Click</a>

この場合thisでも、ウィンドウを参照します。この場合、次のようなことを行うことができます。

jQuery(document).ready(function(){
this.someVar = true;
function ABC(){
    if (window.someVar === true)
    //its running in doc.ready
    else
    //its running elsewhere
}
this.someVar = false;
//...
//rest of code
//...
});
于 2012-09-25T17:29:10.690 に答える