0

PHPのスイッチ関数に似た技術を探しているので、1つの関数を複数の名前付きセレクターに使用できます。どのセレクターが関数を呼び出すかに基づいて、追加のコードが追加されます。

私の例は、「保存して閉じる」ボタンに沿った「保存」ボタンです。後者には、アコーディオンを閉じるための追加のコードがあります。

[保存]ボタンをクリックすると、次のように呼び出されます。

    $('form[name=experienceForm]').submit(function(eve) {

            eve.preventDefault();
            tinyMCE.triggerSave();

            var FormData = $(this).serialize();
            var requestThis = $(this);
            var inputCom = $(this).find('input[name=inputCom]').val();
            var inputTitle = $(this).find('input[name=inputTitle]').val();

                $.ajax({
                        type : 'POST',
                        url : '<?php echo site_url('resume/update'); ?>',
                        data: FormData,
                        dataType: "html",
                        context : $(this),
                        success : function(msg){
                        requestThis.closest('.item').children('h3').children('a').text(inputCom+' : '+inputTitle);

                        if(msg != '') {

                        showNotice(msg);
                        }

                        },

                        error: function(msg){
                        alert('FAIL '+msg);
                        }
                    }); 


    });

[保存して閉じる]ボタンに上記と同じように追加して、次の操作を実行したいと思います。

    $('input[name=experienceClose]').click(function(eve) {

        eve.preventDefault();
        tinyMCE.triggerSave();          
        $(this).parent().parent().parent().parent().parent().parent().parent().parent().parent().accordion({active:"false"});
    }); 
4

2 に答える 2

1

質問が出るかどうかはわかりませんが、スイッチ関数はそれを実行しますか?Javascriptにもありますか?

$('input[name=experienceClose], form[name=experienceForm]').on('click submit', function(e) {
    e.preventDefault();
    tinyMCE.triggerSave();  

    switch ($(this).attr('name')) {   //based on the buttons name
        case 'experienceClose' : //would be the name of the save and close button
            //do something for save and close button
        break;
        case 'experienceForm' :  //would be the name of the save only button
            //do something for save button only
        break;
        default:
            //do something on neither of the above
    }
});

一方、ボタンが2つしかない場合は、if/elseステートメントの方がおそらく適切です。

于 2012-05-08T23:38:08.023 に答える
0

ボタンが次のようなパターンに一致すると仮定しますname="experience*"

// just save the form
function save(e)  { 
    // all the stuff to do in either case
}

// just close it
function close() {
    // death by a thousand parents
}

// use "on" instead of older jQuery constructs
$('form').on('click', '[name^="experience"]', function(e) {
    switch(this.name) {
        case 'experienceSave':
            save.call(this,e);
            break;
        case 'experienceForm':
            save.call(this,e);
            close();
            break;
        default: 
           throw 'Why am i here?';
     }
});

どうしたの:

1)セレクターは、 「experience」nameで始まる属性を持つものをすべて取得します。^=

2)thisイベントハンドラーでは、クリックされた要素です。

3)switchJavascriptでは、Cのような言語と同じです。

4)このような場合にエラーをスローするのは良いことです。defaultケースがなく、セレクターに一致するマークアップを追加した場合、デフォルトがない場合はサイレントに失敗します。発生してはならないことが発生したときにエラーをスローすると、デバッグが容易になります。実際のユーザーにエラーが表示されることを心配している場合は、本番環境に到達しwindow.onerrorたら、サイレントに失敗する前に電子メールなどを送信するグローバルハンドラーを追加してください:)

于 2012-05-09T00:08:35.867 に答える