我在DragAndDrop类型事件上发生了两个函数。初始化jqgrid时:
function gridInitialized() {
var grid = $( this );
var gridId = grid[0].id;
var droppableArea = [];
//Code to populate droppableArea successfully
for( var i = 0, len = $( droppableArea ).length; i < len; i++ ) {
//THIS IS THE LINE IN QUESTION
$( droppableArea )[i].attr( "ondrop", "return handleDropHtml5( event, " + gridId + " )" );
//END OF LINE IN QUESTION
}
}
然后处理drop的函数:
function handleDropHtml5( event, gridId ) {
//Code to handle the drop
}
我注意到,当我声明属性gridId
时,我没有将"ondrop"
放在引号中,但认为它可能仍然有效,因为整个部分是一个字符串,gridId也是一个字符串。然而,当它到达handleDropHtml5
时,gridId将作为与gridId
同名的JQuery表通过。我不需要正确传递gridId
的解决方案,我已经有了。我很好奇为什么会发生转换。是什么导致JQuery表出现?
答案 0 :(得分:3)
您的代码呈现为
<foo ondrop="return handleDropHtml5( event, theId )">
所以theId
被用作全局变量而不是字符串。有些浏览器会看到id匹配并返回与该id匹配的DOM元素。
您需要引用字符串,以便将其视为字符串而不是ID。
$( droppableArea )[i].attr( "ondrop", "return handleDropHtml5( event, '" + gridId + "' )" );
但是你不应该使用attr来设置事件处理程序。您应该使用正确的方法来附加事件,例如jQuery的on()
$( droppableArea ).on( "drop", function (event) { return handleDropHtml5( event, gridId ); } );