可能是这种语法错误的原因

时间:2016-06-25 05:38:22

标签: javascript php

我在脚本标签中有一些PHP代码。但是我的一些行收到错误。但是没有弄清楚它为什么会出错。

  

SyntaxError:missing;在陈述之前

<script>
var item_container=document.getElementById('item-container');
<?php if(isset($item_count)){ ?>
   var item_count=<?php echo $item_count; }?>;
var no_of_column=Math.ceil(item_count/3);
var item_container_width=item_container.offsetWidth;
var each_column_width=(item_container_width/no_of_column)-3+'px';
for(i=0;i<no_of_column;i++){

        var column_div="<div style='border:1px solid red;height:100%;width:"+each_column_width+";float:left;position:relative;'></div>";

        item_container.innerHTML+=column_div;
}

<?php if(isset($items)){ foreach($items as $item){?>

         item_container.firstChild.innerHTML+="<input type='checkbox' name='item' value='item1'>"+<?php echo $item->Item_Type; ?>+"</br>";

<?php 
        }
    }
?>
</script>

如果我省略以下行,则错误消失。

 <?php if(isset($items)){ foreach($items as $item){?>

             item_container.firstChild.innerHTML+="<input type='checkbox' name='item' value='item1'>"+<?php echo $item->Item_Type; ?>+"</br>";

    <?php 
            }
        }
    ?>

3 个答案:

答案 0 :(得分:1)

如果Error building Player: CommandInvokationFailure: Failed to re-package resources. See the Console for details. C:\Users\Documents\Android SDK\android-sdk-windows\build-tools\24.0.0\aapt.exe package --auto-add-overlay -v -f -m -J gen -M AndroidManifest.xml -S "res" -I "C:/Users/Documents/Android SDK/android-sdk-windows\platforms\android-24\android.jar" -F bin/resources.ap_ stderr[] stdout[] UnityEditor.Android.Command.Run (System.Diagnostics.ProcessStartInfo psi, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) UnityEditor.Android.PostProcessAndroidPlayer.Exec (System.String command, System.String args, System.String workingdir, System.String[] progress_strings, Single progress_value, System.String errorMsg) UnityEditor.Android.PostProcessAndroidPlayer.CompileResources (System.String stagingArea, System.String packageName, UnityEditor.Android.AndroidLibraries androidLibraries) UnityEditor.Android.PostProcessAndroidPlayer.PostProcessInternal (System.String stagingAreaData, System.String stagingArea, System.String playerPackage, System.String installPath, System.String companyName, System.String productName, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry) UnityEditor.Android.PostProcessAndroidPlayer.PostProcess (BuildTarget target, System.String stagingAreaData, System.String stagingArea, System.String playerPackage, System.String installPath, System.String companyName, System.String productName, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry) UnityEditor.HostView:OnGUI() 是一个字符串值,那么问题(或一个问题)就是你连接它而不加引号。因此,如果类型为$item->Item_Type,则浏览器看到的代码为:

"red thing"

...这当然是一个语法错误,因为item_container.firstChild.innerHTML+= "<input type='checkbox' name='item' value='item1'>"+red thing+"</br>"; 不是一个变量,即使它不是,你也不能只有red而没有分号。

您应该能够直接在字符串中嵌入PHP回显:

thing

答案 1 :(得分:0)

如果在PHP生成的和平中没有要执行的动态代码,您可以直接插入字符串。但是,您应该转义反斜杠和双引号,因为您的JavaScript代码确实使用双引号作为分隔符,JavaScript字符串中的反斜杠被视为后续字符的转义码。

 item_container.firstChild.innerHTML+="<input type='checkbox' name='item' value='item1'><?php echo str_replace([ '\\', '"'], [ '\\\\', '\\"'], $item->Item_Type); ?></br>";

答案 2 :(得分:0)

我找到了一个解决方案。它在对象文字中分配每个行值,然后遍历该对象并将其属性值分配给复选框。

  var item_container=document.getElementById('item-container');
    <?php if(isset($item_count)){ ?>
    var item_count=<?php echo $item_count; }?>;
    var no_of_column=Math.ceil(item_count/3);
    var item_container_width=item_container.offsetWidth;
    var each_column_width=(item_container_width/no_of_column)-3+'px';
    for(i=0;i<no_of_column;i++){

        var column_div="<div style='height:100%;width:"+each_column_width+";float:left;position:relative;'></div>";

        item_container.innerHTML+=column_div;
    }

        var array_holder=[];
        <?php if(isset($items)){foreach($items as $item){?>
                 var obj={
                     id  :"<?php echo $item->Type_id; ?>",
                     item:"<?php echo $item->Item_Type; ?>"

                 };
               array_holder.push(obj);
        <?php
                    }
                }
        ?>

        var only_divs=item_container.getElementsByTagName('div');
        var array_counter=0;
        var column_index=0;
        array_holder.forEach(function(element,index,array){

            if(array_counter<3){
                   only_divs[column_index].innerHTML+=  "<li style='margin-left:5px;margin-top:3px;'><input type='checkbox' style='outline:1px solid blue;' name='item' value='"+element.id+"'>"+element.item+"</li></br>";

                   array_counter++;
            }else{
                column_index++;
                only_divs[column_index].innerHTML+=  "<li style='margin-left:5px;margin-top:3px;'><input type='checkbox' style='outline:1px solid blue;' name='item' value='item1'>"+element.item+"</li></br>";
                array_counter=0;
            }
        });

        only_divs[0].innerHTML+=  "<li style='margin-left:5px;margin-top:3px;'><input type='checkbox' style='outline:1px solid blue;' name='item' value='0'>other</li></br>";