Javascript 为什么要将此字符串转换为JQuery?
我有两个函数发生在DragAndDrop类型的事件上。初始化jqgrid时:Javascript 为什么要将此字符串转换为JQuery?,javascript,jquery,jqgrid,Javascript,Jquery,Jqgrid,我有两个函数发生在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 ).le
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
}
}
我注意到,在声明属性
“ondrop”
时,我没有将gridId
放在引号中,但我认为它可能会起作用,因为整个部分是一个字符串,gridId也是一个字符串。但是,当它到达handleDropHtml5
时,gridId作为一个JQuery表出现,与gridId
同名。我不需要正确传递gridId
的解决方案,我已经有了。我很好奇为什么会发生这种转变。是什么导致JQuery表出现的?您的代码呈现为
<foo ondrop="return handleDropHtml5( event, theId )">
但是您不应该使用attr来设置事件处理程序。您应该使用适当的方法来附加事件,例如jQuery的on()
您的代码正在呈现为
<foo ondrop="return handleDropHtml5( event, theId )">
但是您不应该使用attr来设置事件处理程序。您应该使用适当的方法来附加事件,例如jQuery的on()
为什么要使用attr分配事件处理程序?这是个坏习惯。使用
.on()
@epascarelloattr
是从其他人的代码中遗留下来的,我只需要添加网格来改变我们现在的工作方式,不想改变太多。[大多数?]浏览器会自动为每个元素的ID创建一个全局变量!这就是这里发生的事情。为什么要使用attr来分配事件处理程序?这是个坏习惯。使用.on()
@epascarelloattr
是从其他人的代码中遗留下来的,我只需要添加网格来改变我们现在的工作方式,不想改变太多。[大多数?]浏览器会自动为每个元素的ID创建一个全局变量!这就是这里发生的事情。
$( droppableArea )[i].attr( "ondrop", "return handleDropHtml5( event, '" + gridId + "' )" );
$( droppableArea ).on( "drop", function (event) { return handleDropHtml5( event, gridId ); } );