2012-01-03 51 views
1

我在頁面上有一個圖標,點擊時從外部JS文件調用函數。刪除帶有jQuery的onclick函數調用

<input type="checkbox" checked="checked" id="myCheck"/> 

<img src="icon.png" id="myIcon" onclick="myFunction)(this,null,null)" /> 

我需要添加一個功能,當複選框被選中禁用此點擊,並允許點擊並調用JS功能,如果沒有選中該複選框。

試過這個,但它似乎沒有工作。我錯過了什麼?

$("#myCheck").prop("checked", true).click(function(event){ 
    event.stopPropagation(); 
}); 

更新:因爲我沒有超過代碼不限於在此特定情況下,報頭的控制程度,並不能除去的onclick =「myFunction的)(在此,NULL,NULL)從IMG標籤,是如果複選框被選中,仍然有一種方法可以禁用點擊動作,也許我可以刪除HTML,這裏JS會被認爲是什麼?它不是屬性...

+1

將點擊事件綁定到複選框,並停止*複選框的事件*傳播。 – Chad 2012-01-03 19:41:11

回答

1

是否有可能而不是禁用點擊事件,在繼續使用myFunction代碼之前,只需檢查複選框的值?

function myFunction() { 
    if (!document.getElementById('myCheck').checked) { 
     // ... 
    } 
} 

編輯/免責聲明:從技術上講,上述示例代碼沒有提供一個關注點分離的好例子,因爲它給myFunction代碼提供了關於myCheck存在的知識。根據您的使用情況,這可能或可能不是一個好的設計模式。 Ktash的答案提供了一種替代解決方案,雖然它使用更多的代碼在理論上更好地分離(儘管也需要jQuery)。

0

而不是做一個onclick屬性,做在JavaScript

$('#myIcon').click(function (e) { 
    if($('#myCheck').is(':checked')) myFunction(this,null,null); 
}); 
+0

$('myIcon')? – 2012-01-03 19:48:43

+0

@RoyiNamir哎呀,是的,@Chad爲我(謝謝),但我的意思是$('#myIcon')'。我花了太多時間在原型和jQuery之間切換lol – Ktash 2012-01-03 19:53:34

+0

我更新了我的問題。謝謝。 – santa 2012-01-04 17:09:12

1

怎麼樣了以下有關:

HTML

<input type="checkbox" checked="checked" id="myCheck"/> 
<img src="icon.png" id="myIcon" /> 

jQuery的

$(function() { 
    function iconClick() { 
     alert('Clicked Icon!'); 
    } 

    $('#myIcon').click(iconClick); 

    $("#myCheck").change(function(e) { 
     if (this.checked) $('#myIcon').click(iconClick); 
     else $('#myIcon').unbind('click'); 
    }); 
}); 

你可以看到它在這個jsFiddle工作。

+0

這些都是很好的解決方案,但是我不能刪除IMG標籤中的onclick =「myFunction」(this,null,null)。是否仍然有一種方法可以禁用JS onclick?UPDATED my question。 – santa 2012-01-04 17:08:19

+0

@santa then you'll have像T斯通的解決方案 – Chad 2012-01-04 17:24:02

+0

但同樣,這將需要從img移動函數調用頭...不是嗎? – santa 2012-01-04 17:26:24

0
<input type="checkbox" checked="checked" id="myCheck"/> 

<img src="icon.png" id="myIcon" /> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script> 
(function ($) { 
    var checkbox = $('#myCheck'), 
     icon = $('#myIcon'), 
     fireEvent, 
     myFunction; 

    fireEvent = function() { 
     if(checkbox.is(':checked')){ 
      icon.off('click'); 
     } else { 
      icon.on('click', myFunction); 
     } 
    }; 

    myFunction = function() { 
     console.log('I just was clicked!'); 
    }; 
    $(function() { 
     fireEvent(); 
     checkbox.on('click', fireEvent); 
    }); 
})(jQuery); 

</script>