【问题标题】:How to pass parameters in Impromptu callback?如何在即兴回调中传递参数?
【发布时间】:2011-08-19 01:06:55
【问题描述】:

我使用 jQuery Impromptu 作为弹出窗口。原始代码如下:

function f1(pa1, pa2){
    $.prompt("need to delete?",{
         callback: callbackfunc,
         button: {OK: true, Cancel: false}
    });
}
function callbackfunc(v,m,f){
    if(v){
        // want to process the pa1 and pa2.
    }
}

如何在回调中处理pa1pa2

【问题讨论】:

    标签: jquery impromptu


    【解决方案1】:

    我不确定插件是否改变了这一点或某处有错误的文档,但 callbacksubmit nowadays and it takes 4 arguments 而不是 3:event, value, message, formVals

    buttons: { Cancel: false, Next: true },
    submit:function(e,v,m,f){ }
    

    适应@Oytun Tez excelent answer,我做了这个例子:

    <html>
    <head>
        <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
        <script type="text/javascript" src="impromptu.js"></script>
        <link rel="stylesheet" media="all" type="text/css" href="impromptu.css" />
    
        <script type="text/javascript">
        function removePhoto( id )
        {
            var txt = 'Are you sure you want to remove this photo?<input type="hidden" id="photoid" name="photoid" value="'+ id +'" />';
            $.prompt( txt,
            { 
                title: "Remove Photo",
                buttons:{ Delete:true, Cancel:false },
                submit: function( event, value, message, formVals )
                {
                    if( value )
                    {
                        var pid = formVals.photoid;
                        console.log('pid: ' + pid );
                    }
                }
            });
        }
    
        $(document).ready( function() 
        {
            $('.btn').on('click', function( e )
            {
                removePhoto( $(this).data('id') ); 
            });
        });
        </script>
    </head>
    <body>
        <input class="btn" type="button" value="Remove photo 1" data-id="1" />
        <input class="btn" type="button" value="Remove photo 2" data-id="2" />
    </body>
    </html>
    

    【讨论】:

      【解决方案2】:

      我在项目中使用你想要的东西。看到这个:

      function removePhoto(id){
          var txt = 'Are you sure you want to remove this photo?<input type="hidden" id="photoid" name="photoid" value="'+ id +'" />';
      
          $.prompt(txt,{ 
              buttons:{Delete:true, Cancel:false},
              callback: function(v,m,f){
                  if(v){
                      var pid = f.photoid;
      
                      //Here is where you would do an ajax post to remove the user
                      //also you might want to print out true/false from your .php
                      //file and verify it has been removed before removing from the 
                      //html.  if false dont remove, $promt() the error.
                      $.get('<?php echo base_url(); ?>index.php/ajaxed/del_photo/'+pid, function(data){
                          if(data != 'false'){
                              $.prompt('The photo was successfuly deleted...', { callback: function() {
                                  photosEdit--;
                                  if(photosEdit == 0) {
                                      window.location = "<?php echo base_url(); ?>index.php<?php echo ($row_p->aid == 0 ? "/gallery/view/me" : "albums/view/".$this->dx_auth->get_user_id()."/".$row_p->aid); ?>";
                                  } else {
                                      $("div#editWrapper_"+pid).hide("slow", function() { $(this).remove();});
                                  }
                              } });
                              //recirect history-1
                          }else{ $.prompt('An error occured while removing this photo...'); }                         
                      });
                  }
                  else{}
              }
          });
      }
      

      【讨论】:

        【解决方案3】:

        如果您的回调方法代码变得复杂,最好的方法是:

        var g_pa1,g_pa2;  // General variables
        
        function f1(pa1, pa2){
        
            g_pa1 = pa1;
            g_pa2 = pa2;
        
            $.prompt("need to delete?",{
             callback: callbackfunc,
             button: {OK: true, Cancel: false}
            });
        }
        
        function callbackfunc(v,m,f){
            if(v){
                //PROCESS YOUR g_pa1 and g_pa2
                g_pa1 = null;
                g_pa2 = null;
            }
        }
        

        【讨论】:

          【解决方案4】:

          我这样解决我的问题:

          function f1(pa1, pa2){
             $.prompt("need to delete?",{
                 callback: function(v, m, f){
                      if(v){
                         //  process of pa1, pa2...
                      }
                 },
                 button: {OK: true, Cancel: false}
             });
          }
          

          如果要处理的参数少一点也没关系。但是,如果回调函数太复杂,参数又多,这种方法就不好了。

          希望有人能给我更好的建议。

          【讨论】:

            猜你喜欢
            • 2022-01-12
            • 1970-01-01
            • 2021-02-08
            • 1970-01-01
            • 2015-06-07
            • 1970-01-01
            • 2010-11-14
            • 1970-01-01
            相关资源
            最近更新 更多