1

テーブルには、2 つの入力 (1 つの選択と 1 つのテキスト) を持つ行があります。私が達成したいのは、一方に値がある場合、もう一方 (同じ行) を無効にする必要があるということです。これは、テキストボックスに値がある場合はオンロードで正しく機能しますが、選択ボックスのみに値がある場合は機能しないようです。

ここの例でわかるように: http://jsfiddle.net/anAgent/UBUhn/1/ 「変更」イベントは正しく機能しますが、 onloadは機能しません。

どんな助けでも大歓迎です!

私はjQuery 1.5.2とGoogle ChromeとIE9の両方で作業しています


最終コードで更新

@scoopseven と @eicto に感謝します。これら 2 つの回答に基づいて、最終的なコードを次に示します。それが他の誰かに役立つことを願っています。

$(document).ready(function() {
    $(".validation-compare").change(runRowValidation);
    $(".validation-compare").each(runRowValidation);
});

function runRowValidation() {
    var $me = $(this),
        $other = $('.validation-compare',$me.closest("tr")).not($me),
        mVal = $me.val(),
        oVal =$other.val();

    if(mVal != "" && oVal == "") {
       $me.removeAttr('disabled');
       $other.attr('disabled',1);        
    } else if(mVal == "" && oVal != "") {
       $other.removeAttr('disabled');
       $me.attr('disabled',1); 
    } else {
        $other.removeAttr('disabled');
        $me.removeAttr('disabled');
    }
}​

http://jsfiddle.net/anAgent/UBUhn/24/で実際の動作を確認できます。

4

3 に答える 3

1
var validme=function() {
    var me=$(this);
    me.removeClass('validation-compare');
    if (me.val()) {
        console.log(me);
        me.addClass('valid');
        me.parent().parent().find('.validation-compare').attr('disabled',1);
        me.addClass('validation-compare');
        return;
    }          
    me.removeClass('valid');   
    if (me.parent().parent().find('.validation-compare.valid').length<1) {

        me.parent().parent().find('.validation-compare').removeAttr('disabled'); }
    me.addClass('validation-compare');
}
    $('.validation-compare').each(validme);    
    $('.validation-compare').change(validme)

http://jsfiddle.net/UBUhn/22/

于 2012-07-31T13:52:44.483 に答える
1

クラスを設定する必要はないと思います。valid交換するだけです

var $otherInput = $('.validation-compare', $parent).not('.valid');

var $otherInput = $('.validation-compare', $parent).not($me);

これにより、 onloadに関する問題が解決されます。ここに例があります

于 2012-07-31T13:58:57.763 に答える
0

関数を分離して、クリック イベントとページの読み込み時に呼び出す必要があります。このようなもの:

    jQuery(function($){

        function myFunction() {
            // do somestuff
        }

        // myFunction needs to be called when select is clicked and when page is loaded
        $('#someelement').click(myFunction);
        $(document).ready(myFunction);

     });
于 2012-07-31T13:27:27.763 に答える