为什么这个字符串被转换为JQuery?

时间:2016-01-06 18:03:18

标签: 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 ).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表出现?

1 个答案:

答案 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 ); } );