2014-02-23 83 views
0

我正在尋找大家一直在尋找的相反情況。我有這個匿名jQuery函數,我想保持這種方式,但我想附加多個事件處理程序在不同的事件(完全是兩個事件)。將多個事件附加到jQuery中的單個函數

  1. 當textarea的具有文本內它改變(keyup
  2. document是clicke(click)。

我知道,抓住回調函數並將其放入函數聲明中,然後使用這兩種情況下的函數將做的工作,但是有什麼東西不會要求我把回調函數在正常功能,只是保持原樣?

這是代碼我目前有:

urls.keyup(function(){ 
    delay('remote', function(){ 
     if (urls.val().length >= char_start) 
     {   
      var has_lbrs = /\r|\n/i.test(urls.val()); 

      if (has_lbrs) 
      { 
       urls_array = urls.val().split("\n"); 

       for (var i = 0; i < urls_array.length; i++) 
       { 
        if (!validate_url(urls_array[i])) 
        { 
         urls_array.splice(i, 1); 
         continue; 
        } 
       } 
      } 
      else 
      { 
       if (!validate_url(urls.val())) 
       { 
        display_alert('You might have inserted an invalid URL.', 'danger', 3000, 'top'); 
        return; 
       } 
      } 

      final_send = (has_lbrs && urls_array.length > 0) ? urls_array : urls.val(); 

      if (!final_send) 
      { 
       display_alert('There went something wrong while uploading your images.', 'danger', 3000, 'top'); 
       return; 
      } 

      var template = '<input type="text" class="remote-progress" value="0" />'; 

      $('.pre-upload').text('').append(template); 
      $('.remote-progress').val(0).trigger('change').delay(2000); 
      $('.remote-progress').knob({ 
       'min':0, 
       'max': 100, 
       'readOnly': true, 
       'width': 128, 
       'height': 128, 
       'fgColor': '#ad3b3b', 
       'bgColor': '#e2e2e2', 
       'displayInput': false, 
       'cursor': true, 
       'dynamicDraw': true, 
       'thickness': 0.3, 
       'tickColorizeValues': true, 
      }); 

      var tmr = self.setInterval(function(){myDelay()}, 50);   
      var m = 0; 

      function myDelay(){ 
       m++; 
       $('.remote-progress').val(m).trigger('change'); 

       if (m == 100) 
       {    
        // window.clearInterval(tmr); 
        m = 0; 
       } 
      } 

      $.ajax({ 
       type: 'POST', 
       url: 'upload.php', 

       data: { 
        upload_type: 'remote', 
        urls: JSON.stringify(final_send), 
        thumbnail_width: $('.options input[checked]').val(), 
        resize_width: $('.options .resize_width').val(), 
        album_id: $('#album_id').val(), 
        usid: $('#usid').val(), 
       }, 

       success: function(data) { 
        // console.log(data); return; 
        var response = $.parseJSON(data); 

        if (response) 
        { 
         $('.middle').hide(); 
         $('.remote-area').hide(); 
         window.clearInterval(tmr); 
        } 

        if ('error' in response) 
        { 
         //console.log(response.error); 

         if (!$('.top-alert').is(':visible')) 
         { 
          display_alert(response.error, 'danger', 3000, 'top'); 
         } 

         return; 
        } 

        if (!target.is(':visible')) 
        { 
         target.show().addClass('inner'); 
        } 
        else 
        { 
         target.addClass('inner'); 
        } 

        for (var key in response) 
        { 
         var image_url = response[key]; 

         var thumb_uri = image_url.replace('/i/', '/t/'); 
         var forum_uri = '[img]' + image_url + '[/img]'; 
         var html_uri = '&lt;a href=&quot;' + image_url + '&quot;&gt;' + image_url + '&lt;/a&gt;'; 

         var view_url = image_url.replace(/store\/i\/([A-Za-z0-9]+)(?=\.)/i, "image/$1"); 
         view_url = strstr(view_url, '.', true); 

         // Append the upload box 
         target.append(upload_box(key)); 

         // Hide knob 
         $('.knobber').hide(); 

         // Put the image box 
         putImage($('.' + key), view_url, image_url, thumb_uri, forum_uri, html_uri); 
        } 
       }, 
      }); 
     } 

    }, 2000); // Delay 
}); // Remote upload 

我如何在文件click此代碼的運行呢?

謝謝。

+2

你需要分享代碼,以便我們可以更好地瞭解 –

+0

好的,我會的。 – Aborted

+0

我想你已經知道答案了,正如你所說的那樣抓取回調並創建一個命名參考並再次使用它 –

回答

2

正如你自己在你的問題中所說的,答案是創建一個外部命名引用到回調函數並將其用作回調函數。

jQuery(function() { 
    function callback(e) { 
     console.log('event2', e.type); 
    } 
    $('input').keyup(callback); 
    $(document).click(callback) 
}) 

不過既然你問了一個不同的風格來看看,它本質上是做同上一個

jQuery(function() { 
    var callback; 
    $('input').keyup(callback = function (e) { 
     console.log('event', e.type); 
    }); 
    $(document).click(callback) 
}) 

演示:Fiddle

相關問題