有没有办法测试自定义属性是否为函数?我已经尝试过使用jquery的isFunction方法,但它似乎不适用于这种情况。
例如:
<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选择器来设置他们需要的行为。但是想知道是否有内联方式来做这件事。
答案 0 :(得分:1)
你必须使用eval()
;属性中的内联JS只是一个普通的字符串。
我强烈建议你不要使用内联JS - 阅读起来并不好,甚至更难维护/调试。
答案 1 :(得分:1)
从DOM元素获取属性时,如果jQuery是DOM事件(如onclick
,onkeyup
等),jQuery会将它们转换为函数,但如果它们是自定义“事件”则不会(例如: 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>