Jadi saya memiliki kode sederhana yang memberi tahu bahwa jika ada paragraf dan pengguna mengkliknya, itu akan menampilkan bidang teks dan tombol. Saat Anda memasukkan informasi di bidang teks dan pergi, nilai di bidang teks harus diubah dengan nilai bidang teks. Kode saya berfungsi dengan baik tetapi memberikan kesalahan Tidak dapat membaca properti 'nodeName' dari nol di HTMLDocument.catchIt. Adakah yang bisa tolong beri tahu cara menyelesaikannya?

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <p>jobgo</p>
<script type="text/javascript">
    var editing  = false;

if (document.getElementById && document.createElement) {
    var butt = document.createElement('BUTTON');
    var buttext = document.createTextNode('Ready!');
    butt.appendChild(buttext);
    butt.onclick = saveEdit;
}

function catchIt(e) {
    if (editing) return;
    if (!document.getElementById || !document.createElement) return;
    if (!e) var obj = window.event.srcElement;
    else var obj = e.target;
    while (obj.nodeType != 1) {
        obj = obj.parentNode;
    }
    if (obj.tagName == 'TEXTAREA' || obj.tagName == 'A') return;
    while (obj.nodeName != 'P' && obj.nodeName != 'HTML') {
        obj = obj.parentNode;
    }
    if (obj.nodeName == 'HTML') return;
    var x = obj.innerHTML;
    var y = document.createElement('TEXTAREA');
    var z = obj.parentNode;
    z.insertBefore(y,obj);
    z.insertBefore(butt,obj);
    z.removeChild(obj);
    y.value = x;
    y.focus();
    editing = true;
}

function saveEdit() {
    var area = document.getElementsByTagName('TEXTAREA')[0];
    var y = document.createElement('P');
    var z = area.parentNode;
    y.innerHTML = area.value;
    z.insertBefore(y,area);
    z.removeChild(area);
    z.removeChild(document.getElementsByTagName('button')[0]);
    editing = false;
}

document.onclick = catchIt;</script>
</body>
</html>
0
Noob 28 Mei 2021, 19:35

1 menjawab

Jawaban Terbaik

Anda memiliki acara onclick yang dilampirkan di seluruh dokumen dan menangani semua yang ada di dalam fungsi itu. Sekarang Anda kembali dengan benar ketika itu adalah TextArea atau tag jangkar tetapi lupa melakukannya untuk tag BUTTON.

Karena Anda memiliki satu lagi pengendali onclick yang terpasang untuk tombol Anda yang disebut saveClick() yang melakukan pekerjaan sebenarnya yang Anda inginkan, kode Anda berfungsi seperti yang diharapkan. Anda hanya perlu kembali dari event handler onclick lainnya (catchit) ketika Anda memiliki tombol. Edit seperti ini, ini akan berfungsi:

    if (obj.tagName == 'TEXTAREA' || obj.tagName == 'A' || obj.tagName == 'BUTTON') return;

1
Tushar Shahi 28 Mei 2021, 16:46