Обратите внимание, что есть случаи, когда вы определили свой собственный пользовательский класс и хотите сохранить атрибуты, тогда вы должны использовать copy.copy()
или copy.deepcopy()
, а не альтернативы, например, в Python 3:
import copy
class MyList(list):
pass
lst = MyList([1,2,3])
lst.name = 'custom list'
d = {
'original': lst,
'slicecopy' : lst[:],
'lstcopy' : lst.copy(),
'copycopy': copy.copy(lst),
'deepcopy': copy.deepcopy(lst)
}
for k,v in d.items():
print('lst: {}'.format(k), end=', ')
try:
name = v.name
except AttributeError:
name = 'NA'
print('name: {}'.format(name))
Выходы:
lst: original, name: custom list
lst: slicecopy, name: NA
lst: lstcopy, name: NA
lst: copycopy, name: custom list
lst: deepcopy, name: custom list
Причина, по которой он не работает, когда вы помещаете этот код в несколько мест в одном и том же HTML-файле, заключается в том, что когда у вас есть одна форма с именем randform
, она возвращает эту форму. Но так как у вас есть несколько форм с одним и тем же именем randform
. document.randform
теперь возвращает массив формы.
Это быстрое решение (возможно, не рекомендуемый способ).
...
<input
class="reload-but"
type="button"
value="↻ "
onClick="randomString(this);"
>
...
function randomString(input) {
var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
var string_length = 8;
var randomstring = '';
for (var i=0; i<string_length; i++) {
var rnum = Math.floor(Math.random() * chars.length);
randomstring += chars.substring(rnum,rnum+1);
}
// no longer rely on the form name.
input.parentElement.randomfield.value = randomstring;
}
У меня нет проблем с этим. Удалите закрытие div, которое не нужно в этом контексте, и разделите ваш html и javascript, поскольку это, как правило, хорошая практика
function randomString() {
var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
var string_length = 8;
var randomstring = '';
for (var i = 0; i < string_length; i++) {
var rnum = Math.floor(Math.random() * chars.length);
randomstring += chars.substring(rnum, rnum + 1);
}
document.randform.randomfield.value = randomstring;
}
<form name="randform">
<input class="reload-but" type="button" value="↻ " onClick="randomString()">
<div class="unnec">
<input class="random-but" type="button" name="randomfield" value="">
</form>
Я решил сам, просто изменил имя js function
и имя form
в Html на другое, а не на то, что я использовал раньше!