0

我正在寻找一种类似于 PHP 中的 switch 函数的技术,因此我可以将单个函数用于多个命名选择器。将根据调用函数的选择器添加额外的代码。

我的示例是“保存并关闭”按钮旁边的“保存”按钮,后者具有关闭手风琴的附加代码。

如果单击“保存”按钮,它将调用:

    $('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
    }
});

另一方面,如果只有两个按钮,则 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) 选择器获取任何具有以“经验”name开头的属性的东西。^=

2)this在事件处理程序中是被点击的元素。

3)switch在 Javascript 中与任何类 C 语言相同。

4)在这样的事情中抛出错误是件好事。如果您没有default案例并添加了一些恰好与选择器匹配的标记,那么如果没有默认值,它只会静默失败。当不应该发生的事情发生时抛出错误,使调试更容易。如果您担心真正的用户看到错误,那么当您投入生产时添加一个全局window.onerror处理程序,该处理程序会在静默失败之前向您发送电子邮件或其他内容:)

于 2012-05-09T00:08:35.867 回答