2014-01-08 2 views
0

У меня проблема с работой с функциями, которая вызывает this.form.Приближается this.form от innerHTML

Вот что часть моего исходного кода:

searchResult.innerHTML += "<td><div class=\"searchcard\" draggable=\"true\" ondragstart=\"isexc=0; clickselect(" 
searchResult.innerHTML += i 
searchResult.innerHTML += "); setformparam(this.form); onDragStart(event)\" 

Здесь я попытался выполнить setformparam(this.form), когда я начало перетаскивания div окна, построенное внутри innerHTML сценария, но он не работает.

Любая другая функция, такая как isexc=0, clickselect(i), хорошо работала.

Пожалуйста, научите меня, как получить доступ к this.form из внутреннего JavaScript. Благодарю.

+0

Откуда берутся 'setformparam()' и 'clickselect()'? Я этого раньше не видел. – zero298

+0

@ zero298 'setformparam()' и 'clickselect()' - это функции, определенные в одном файле .js с этим исходным кодом. 'setformparam (f)' вызывает форму в html-файле и сохраняет определенную информацию для глобальных переменных, объявленных в .js-файле. – fiverules

+0

@Teemu 'searchResult' - это имя' div', включенное в форму в html-файле. Он находится внутри '

' как '
' – fiverules

ответ

-2

попробовать

$(this).children('form') и не 'this'

+0

Это будет jQuery, который, похоже, не имеет ничего общего с этим. – Ryan

1

Это ужасный способ создания элементов. Используйте DOM:

var cell = document.createElement("td"); 
var searchCard = document.createElement("div"); 
searchCard.className = "searchcard"; 
searchCard.draggable = true; 

(function(i) { 
    searchCard.addEventListener("dragstart", function(e) { 
     isexc = 0; 
     clickselect(i); 
     setformparam(someForm); 
     onDragStart(e); 
    }, false); 
})(i); // I’m just assuming `i` here is a loop variable of some kind 
     // You should probably use Array.prototype.forEach 

cell.appendChild(searchCard); 
searchResult.appendChild(cell); 

И использовать делегирование событий и прекратить использование глобальных переменных. Здесь есть много вещей, которые можно почистить здесь, но вам, вероятно, стоит попробовать Code Review.

+0

Большое спасибо, я попробую. Но это мой первый раз, когда я вижу DOM, так что вы можете дать больше объяснений о том, что делает каждая строка? – fiverules

+0

@fiverules: HTML анализируется на дерево. Использование 'document.createElement' создает элемент с указанным именем тега, который можно вставить в это дерево; 'appendChild' выполняет фактическую установку. '(function (i) {...}) (i);' [- это оболочка, которая помогает вам с проблемой замыкания в контуре] (https://stackoverflow.com/questions/750486/javascript-closure-inside- петли-простой-практический пример). Если вы не распознаете синтаксис 'addEventListener' или функциональный литерал, я попытаюсь найти на нем хорошую современную книгу, но это необходимо знать и трудно объяснить лучше, чем MDN здесь , – Ryan

+0

Спасибо. Я понял, что это лучший способ создать объекты 'searchcard'. Но как я могу получить доступ к 'form' в главном html-файле изнутри? – fiverules

0

Я не уверен, что это то, о чем вы просите, но если вы хотите получить элемент формы как объект DOM, вы можете установить идентификатор элемента и называть его getElementById.

Или вы можете получить его по document.getElementsByTagName ("form") [x] где x - это индекс формы, которую вы хотите.

+0

Я хочу получить значение 'checked' переключателя и' selectedIndex' 'select' внутри' form'. Как я могу это сделать? – fiverules

+0

О, я понял. Я сделал это, указав ID каждому элементу в форме и вызывая его document.getElementById, вместо того, чтобы вызывать форму. Большое спасибо. – fiverules

Смежные вопросы