2012-01-27 15 views
0

有沒有辦法來測試自定義屬性是一個函數?我試過使用jquery的isFunction方法,但它似乎不適用於這種情況。jQuery的 - 檢查屬性上的內聯JavaScript的

例如:

<input id="test" class='date' oncomplete="function() { alert('i am a function'); }" type="text" /> 

<script> 
    $(".date").livequery(function() { 
     var onComplete = $(this).attr("oncomplete"); 
     if ($.isFunction(onComplete)) { 
      $(this).mask("99/99/9999", { completed: onComplete }); 
     } else { 
      $(this).mask("99/99/9999"); 
     } 
    }); 
</script> 

我有幾個日期字段。我試圖給他們幾個特殊的行爲。我知道我可以有一個單獨的jquery選擇器來設置它們所需的行爲。但是想看看是否有內聯的方式來做到這一點。

回答

1

當從DOM元素越來越屬性,jQuery的將其轉換爲功能,如果他們是DOM事件(如onclickonkeyup等),但如果他們定製的「事件」(例如:http://jsfiddle.net/FJWhp/1/)。

我建議不要這樣做。我建議將這個函數放入JavaScript中,並使用data-屬性來存儲它的名字。

像這樣:

<input id="test" class='date' data-complete="dateComplete" type="text" /> 

<script> 
    function dateComplete() { 
     alert('i am a function'); 
    } 

    $(".date").livequery(function() { 
     var onComplete = $(this).data("complete"); 
     if ($.isFunction(window[onComplete])) { 
      $(this).mask("99/99/9999", { completed: window[onComplete] }); 
     } else { 
      $(this).mask("99/99/9999"); 
     } 
</script> 

或者更好的,只是在JavaScript功能,不要將其附加到DOM元素可言。

<input id="test" class='date' type="text" /> 

<script> 
    $(".date").livequery(function() { 
     $(this).mask("99/99/9999", { 
      completed: function(){ 
       alert('i am a function'); 
      } 
     }); 
</script> 
+0

在你的第二個例子中,如果jquery沒有附加到DOM元素中,jquery如何獲得「完整」數據? – Brosto 2012-01-27 15:38:26

+0

@Brosto:我編輯了答案,這是一個複製和粘貼失敗。在第二個例子中,沒有關於DOM元素的數據,並且該函數是匿名的。在該功能中,您可以決定要做什麼。 – 2012-01-27 15:43:40

+0

無法讓您的第一個示例工作。你可以看一下嗎? http://jsfiddle.net/VBGhs/ – Brosto 2012-01-27 16:01:17

1

你將不得不使用eval()這個;內聯JS屬性只是一個普通的字符串。

我強烈建議你不要使用內聯JS--它不好讀,甚至更難維護/調試。