English 中文(简体)
jquery 连接.show 和.hide 的自定义事件
原标题:jquery custom events attached to .show and .hide

我正探索jquery的潜力,以满足我们的一些UI要求,并且正在经历一些奇怪的行为。我对jQuery非常新,我正试图实施一种基本的公关子模式,它连接到 & amp; 隐藏功能中。

尽管定制事件机制表面上看起来非常简单,但它并没有如我所期望的那样表现得那么好。我看不到我的术语错误,所以我一定误解了这些定制事件要起作用的方式。

当我执行此代码时,我认为<它们>应该发生。

初始阶段( 在 Doc. Ready 之后) 问题2 元素应该隐藏 。

当我点击佛蒙特电台按钮时,问题2应显示为可见,然后有一个警示盒,表明问题2已显示为可见。

当我点击另一个无线电按钮时,问题2应隐藏,然后有一个警告箱,表明问题2已被隐藏。

What is actually happening is that I get numerous alert boxes when making question 2 visible, and none when I hide it? Please help me understand why it s doing this.

以下是脚本 :

    <script type="text/javascript">

    function processRadioButtonASD() {
        var isChecked = ($("input[name=question1]:checked").val() == "question1.Vermont");
        if (isChecked == true) {
            $("[data-uniquename=question2]").show(250);
        } else {
            $("[data-uniquename=question2]").hide(250);
        }
    }

    function detectVisibilityChange(uniqueName) {
        $("[data-uniquename=" + uniqueName + "]").bind("madeVisible", function () {
            alert($(this).attr("data-uniquename") + " was made visible");
        });
        $("[data-uniquename=" + uniqueName + "]").bind("madeHidden", function () {
            alert($(this).attr("data-uniquename") + " was made hidden");
        });
    }

    $(function () {
        $.each(["show", "hide"], function () {
            var _oldFn = $.fn[this];
            $.fn[this] = function () {
                var wasVisible = $(this).is( :visible );
                var result = _oldFn.apply(this, arguments);
                var isVisible = $(this).is( :visible );

                if ((isVisible == true) && (wasVisible == false)) {
                    $(this).triggerHandler("madeVisible");
                } else if ((isVisible == false) && (wasVisible == true)) {
                    $(this).triggerHandler("madeHidden");
                }
                return result;
            }
        });
    });

    $(document).ready(function () {
        processRadioButtonASD();
        detectVisibilityChange("question2");
        $("input[name= question1 ]").change(function () { processRadioButtonASD(); });
    });
</script>

这是 html :

    <div id="content">
    <div id="radioButtonASD" class="example">
        <h2>radio button visibility trigger</h2>
        <div data-uniquename="question1" class="question">
            <label for="question1">
                Question 1) (select Vermont to show Question2)
            </label>
            <br />
            <label data-uniquename="question1.Maine">
                <input name="question1" data-uniquename="question1.Maine" type="radio" value="me" />Maine</label><br />
            <label data-uniquename="question1.Vermont">
                <input name="question1" data-uniquename="question1.Vermont" type="radio" value="question1.Vermont" />Vermont</label><br />
            <label data-uniquename="question1.NewHampshire">
                <input name="question1" data-uniquename="question1.NewHampshire" type="radio" value="question1.NewHampshire" />New
                Hampshire</label><br />
            <label data-uniquename="question1.Conneticut">
                <input name="question1" data-uniquename="question1.Conneticut" type="radio" value="question1.Conneticut" />Conneticut</label><br />
            <label data-uniquename="question1.Massachusetts">
                <input name="question1" data-uniquename="question1.Massachusetts" type="radio" value="question1.Massachusetts" />Massachusetts
            </label>
        </div>
    <br />
        <div data-uniquename="question2" class="question">
            <label>
                Question 2)
            </label>
            <br />
            <select>
                <option data-uniquename="question2.honda" value="honda">Honda</option>
                <option data-uniquename="question2.volvo" value="volvo">Volvo</option>
                <option data-uniquename="question2.saab" value="saab">Saab</option>
                <option data-uniquename="question2.mercedes" value="mercedes">Mercedes</option>
                <option data-uniquename="question2.audi" value="audi">Audi</option>
            </select>
        </div>
    </div>
</div>

谢谢你的寻找。

问题回答

我提出了另一种办法。

$.each(["show", "hide"], function() {
    var effect = $.fn[this];
    $.fn[this] = function(duration, move, callback) {
        // Match the arguments
        var speed = duration;
        var easing = callback && move || move && !jQuery.isFunction( move ) && move;
        var fn = callback || !callback && move || jQuery.isFunction( duration ) && duration;
        // Wrap the callback function   
        var wrapped = fn;
        var wasVisible = $(this).is( :visible );
        fn = function(){
            var isVisible = $(this).is( :visible );
            $.proxy(wrapped, this);
            if ((isVisible == true) && (wasVisible == false)) {
                $(this).triggerHandler("madeVisible");
            } else if ((isVisible == false) && (wasVisible == true)) {
                $(this).triggerHandler("madeHidden");
            }
        };   
        // Run the effect with the wrapped callback             
        return effect.call(this, speed, easing, fn);
    };
});

使用 recall 函数。 您可以从该功能重构和清除代码 。

看看""http://jsfiddle.net/D5aeH/" rel="nofollow",一个工作例子





相关问题
getGridParam is not a function

The HTML: <a href="javascript:void(0)" id="m1">Get Selected id s</a> The Function: jQuery("#m1").click( function() { var s; s = jQuery("#list4").getGridParam( selarrrow )...

selected text in iframe

How to get a selected text inside a iframe. I my page i m having a iframe which is editable true. So how can i get the selected text in that iframe.

jQuery cycle page with links

I am using the cycle plugin with pager functionality like this : $j( #homebox ) .cycle({ fx: fade , speed: fast , timeout: 9000, pager: #home-thumbs , ...

jquery ui dialog opens only once

I have a button that opens a dialog when clicked. The dialog displays a div that was hidden After I close the dialog by clicking the X icon, the dialog can t be opened again.

jConfirm with this existing code

I need help to use jConfirm with this existing code (php & Jquery & jAlert). function logout() { if (confirm("Do you really want to logout?")) window.location.href = "logout.php"; } ...

Wrap text after particular symbol with jQuery

What I m trying to do, is wrap text into div inside ll tag. It wouldn t be a problem, but I need to wrap text that appears particularly after "-" (minus) including "minus" itself. This is my html: &...

热门标签