2013-06-08 10 views
7

मेरे पास एक स्क्रिप्ट है जो पृष्ठ के शरीर पर माउस की स्थिति के अनुसार divs रखती है। मेरे पास एक बटन है जो "साफ़ करें" कहता है और मैं इसे बनाए गए divs को साफ़ करने के लिए इसका उपयोग करना चाहता हूं। मैं उसे कैसे प्राप्त कर सकता हूं?jQuery - हटाएं() काम नहीं कर रहे

स्क्रिप्ट और स्रोत मैं लिखा है:

एचटीएमएल

<!DOCTYPE html> 
<html> 
    <body> 
     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script> 
     <script src="bhaiya.js"></script> 
     <button style="z-index: 2000;" class="clear" onclick="clear()">Clear</button> 
    </body> 
</html> 

jQuery

$(document).ready(function(){ 

    $(this).mousedown(function(e){ 
     $x = e.pageX; 
     $y = e.pageY; 

     $div = "<div class='theDiv' style='width: 250px; height: 150px; background-color:#e7e7e7; position: absolute; top:" + $y + "px; left:" + $x + "px;'>Hey</div>"; 
     $("body").prepend($div); 
    }); 

    function clear() { 
     $(".theDiv").remove(); 
    } 

}) 

jsFiddle: http://jsfiddle.net/BpAYz/

किसी भी मदद की सराहना की जाएगी :)

उत्तर

7

इनलाइन एचटीएमएल विशेषता ईवेंट हैंडलर्स केवल वैश्विक कार्यों कॉल कर सकते हैं। आपका clear() फ़ंक्शन वैश्विक नहीं है क्योंकि इसे के अंदर आपके दस्तावेज़ तैयार हैंडलर के रूप में परिभाषित किया गया है, इसलिए आपके onclick="clear()" इसे नहीं ढूंढ सकते हैं। आप (यह वैश्विक बनाने) या तो तैयार हैंडलर बाहर समारोह बढ़ने की जरूरत है, या, बेहतर, jQuery के साथ क्लिक बाँध: भी

$(document).ready(function(){  
    $(this).mousedown(function(e){ 
     var $x = e.pageX; 
     var $y = e.pageY;  
     var $div = "<div class='theDiv' style='width: 250px; height: 150px; background-color:#e7e7e7; position: absolute; top:" + $y + "px; left:" + $x + "px;'>Hey</div>"; 
     $("body").prepend($div); 
    }); 

    $(".clear").click(function() { 
     $(".theDiv").remove(); 
    }); 
}); 

ध्यान दें कि मैं अपने mousedown में चर के सामने var जोड़ दिया है हैंडलर: var के बिना वे वैश्विक चर बन जाते हैं, जो सिर्फ आपके कोड को अधिक त्रुटि प्रवण और डीबग करने में कठोर बनाता है। (जब तक आपके पास कोई अच्छा कारण न हो कि वे ग्लोबल्स क्यों हो?)

+0

उस अतिरिक्त जानकारी के लिए धन्यवाद! –

+0

धन्यवाद आदमी! आपका बहुत बहुत धन्यवाद! आपने बस मेरा दिमाग साफ़ कर दिया –

+0

आपका स्वागत है। नोट भी '

2

समारोह clear वैश्विक क्षेत्र में होना चाहिए। अन्यथा बटन पर एक आईडी button1 दें और jQuery का उपयोग कर click ईवेंट श्रोता के रूप में फ़ंक्शन जोड़ें।

http://jsfiddle.net/BpAYz/2/

कोड:

जे एस

$(document).ready(function() { 

    $(this).mousedown(function (e) { 
     if (!$(e.target).is("#button1")) { 
      $x = e.pageX; 
      $y = e.pageY; 

      $div = "<div class='theDiv' style='width: 250px; height: 150px; background-color:#e7e7e7; position: absolute; top:" + $y + "px; left:" + $x + "px;'>Hey</div>"; 
      $("body").prepend($div); 
     } 
    }); 

    $(".clear").click(function() { 
     $(".theDiv").remove(); 
    }); 

}) 

एचटीएमएल

<body> 
    <button id="button1" style="z-index: 2000;" class="clear">Clear</button> 
</body> 

मैं सिर्फ अपने को संशोधित किया है। फ़ंक्शन में चर घोषित करते समय var कीवर्ड का उपयोग करें।

+0

लेकिन मैं पहले से ही उस बटन को वर्ग को शामिल किया है? क्या इससे कोई फर्क पड़ता है? –

+0

देखें कि यह कैसे किया जाना चाहिए http://jsfiddle.net/BpAYz/2/ – Diode

1

आप ऐसा करने की जरूरत: -

साफ़

$(document).ready(function(){ 

$(this).mousedown(function(e){ 
    $x = e.pageX; 
    $y = e.pageY; 

    $div = "<div class='theDiv' style='width: 250px; height: 150px; background-color:#e7e7e7; position: absolute; top:" + $y + "px; left:" + $x + "px;'>Hey</div>"; 
    $("body").prepend($div); 
}); 

$(document).on("click", "button.clear", function(e){ 
    e.stopPropagation(); 
     $(".theDiv").remove(); 
}) 

})

+0

यह सभी बटनों पर क्लिक श्रोता जोड़ देगा, लेकिन मुझे कक्षा ".clear" –

+0

के साथ बटन चाहिए। – pvnarula

+0

ठीक है, लेकिन अगर मैं "बटन" हटा देता हूं तो क्या इससे कोई समस्या होगी? –

2

इसे इस तरह कार्य करें: http://jsfiddle.net/Qn9yL/1/

आप बटन के बजाय onclick का उपयोग करने का भी क्लिक करने के लिए संलग्न करना चाहिए।

$(document).ready(function(){ 

    $(this).mousedown(function(e){ 
     $x = e.pageX; 
     $y = e.pageY; 

     $div = "<div class='theDiv' style='width: 250px; height: 150px; background-color:#e7e7e7; position: absolute; top:" + $y + "px; left:" + $x + "px;'>Hey</div>"; 
     $("body").prepend($div); 
    }); 

    $('#clear').click(function(e){ 
     e.preventDefault(); 
     $(".theDiv").remove(); 
    }); 

}) 

आप भी e.preventDefault() करना चाहते हैं; घटना को रोकने के लिए तो खलबली मचाने वाले और एक नया बनाने div आदि

-2

यह लगातार तत्वों के साथ काम करता है:

<style media="all"> 
.theDiv { 
    display:none; 
} 
</style> 
संबंधित मुद्दे