कैसे सही जावास्क्रिप्ट घटना को बनाए रखने के लिए cloneNode का उपयोग करने के बाद (सही)

वोट
5

मुझे लगता है कि आदानों की कई पंक्तियों में शामिल है एक ऐसा फ़ॉर्म तत्व है। एक नई वस्तु की विशेषताओं है कि मैं अपने वेब अनुप्रयोग में बनाना चाहते हैं के रूप में प्रत्येक पंक्ति के बारे में सोचो। और, मैं एक HTTP POST में कई नई वस्तुओं बनाने में सक्षम होना चाहता हूँ। मैं जावास्क्रिप्ट के अंतर्निहित cloneNode (सही) विधि का उपयोग कर रहा हूँ प्रत्येक पंक्ति क्लोन करने के लिए। समस्या प्रत्येक इनपुट लाइन भी एक हटाने अपने onclick-घटना से जुड़ी कड़ी है कि:

// prototype based
<div class=input-line>
    <input .../>
    <a href=# onclick=$(this).up().remove();> Remove </a>
</div>

जब क्लोन इनपुट लाइन को हटाने के लिंक पर क्लिक किया जाता है, यह भी किसी भी इनपुट लाइनों है कि एक ही डोम वस्तु से क्लोन किया गया निकाल देता है। यह ऊपर DOM तत्व की cloneNode (सही) उपयोग करने के बाद उचित एंकर टैग करने के लिए इस वस्तु rebind करना संभव है?

27/08/2008 को 05:27
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


6 जवाब

वोट
-1

जैसे आप jQuery का उपयोग कर रहे लग रहा है? यह घटनाओं के साथ एक तत्व क्लोन करने के लिए एक विधि है: http://docs.jquery.com/Manipulation/clone#true

संपादित करें: ओह मैं तुम्हें प्रोटोटाइप उपयोग कर रहे हैं।

27/08/2008 को 08:18
का स्रोत उपयोगकर्ता

वोट
0

आप innerHTML विधि, या एक मिश्रण का उपयोग कर क्लोनिंग की कोशिश कर सकते:

var newItem = $(item).cloneNode(false);
newItem.innerHTML = $(item).innerHTML;

इसके अलावा: मुझे लगता है cloneNode घटनाओं, addEventListener के साथ पंजीकृत क्लोन नहीं है। लेकिन IE के attachEvent घटनाओं रहे हैं क्लोन। लेकिन मुझसे गलती हो सकती है।

28/08/2008 को 12:34
का स्रोत उपयोगकर्ता

वोट
0

मैं IE7 और FF3 में यह परीक्षण किया है और यह काम किया अपेक्षा के अनुरूप - वहाँ कुछ और ही चल रहा होना चाहिए।

यहाँ मेरी परीक्षण स्क्रिप्ट है:

<div id="x">
    <div class="input-line" id="y">
        <input type="text">
        <a href="#" onclick="$(this).up().remove();"> Remove </a>
    </div>
</div>

<script>

$('x').appendChild($('y').cloneNode(true));
$('x').appendChild($('y').cloneNode(true));
$('x').appendChild($('y').cloneNode(true));

</script>
04/10/2008 को 14:25
का स्रोत उपयोगकर्ता

वोट
0

इस समस्या को डिबग करने के लिए, मैं अपने कोड लपेट होगा

$(this).up().remove()

एक समारोह में:

function _debugRemoveInputLine(this) {
    debugger;
    $(this).up().remove();
}

यह तुम क्या $ (इस) पता लगाने के लिए लौटने की अनुमति देगा। कोड जो तत्व cloneNode का उपयोग कर बनाता है में - यह वास्तव में एक से अधिक वस्तु (एकाधिक पंक्तियों) लौट रहा है, तो आप निश्चित रूप से देखने के लिए जहां पता है। आप जिसके परिणामस्वरूप तत्व (यानी आईडी गुण बदल रहा है) के किसी भी संशोधन करते हैं?

अगर मैं समस्या आप का वर्णन कर रहे हैं के लिए किया था, मैं ट्रिगर तत्व और "पंक्ति" तत्व के लिए अद्वितीय आईडी जोड़ने पर विचार होगा।

06/10/2008 को 16:35
का स्रोत उपयोगकर्ता

वोट
7

प्रत्येक लिंक पर हैंडलर न रखें (यह वास्तव में, एक बटन होना चाहिए BTW)। का प्रयोग करें बुदबुदाती घटना को संभालने के लिए सभी एक हैंडलर के साथ बटन:

formObject.onclick = function(e)
{
    e=e||event; // IE sucks
    var target = e.target||e.srcElement; // and sucks again

    // target is the element that has been clicked
    if (target && target.className=='remove') 
    {
        target.parentNode.parentNode.removeChild(target.parentNode);
        return false; // stop event from bubbling elsewhere
    }
}

+

<div>
  <input…>
  <button type=button class=remove>Remove without JS handler!</button>
</div>
12/10/2008 को 00:53
का स्रोत उपयोगकर्ता

वोट
0

सबसे पहले जवाब सही एक है।

Pornel परोक्ष अधिकांश क्रॉस-ब्राउज़र और ढांचे नास्तिक समाधान का सुझाव दे रहा है।

यह परीक्षण नहीं किया है, लेकिन अवधारणा इन गतिशील घटनाओं को शामिल स्थितियों में काम करेंगे।

18/10/2008 को 22:27
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more