2016-09-15 57 views
1

我有以下表单,当用户从<select>中选择一个选项时,javascript将其输入到“名称”字段中。除非选项包含撇号,否则它只会在撇号之前截断。我已经尝试将selectedValue = selectedValue.replace(/'/g, \"\\'\");添加到javascript,但它没有帮助。任何意见,将不胜感激。PHP字段条目随着撇号而变化

#related form objects 
echo "<br><br>Name: <input type=\"text\" name=\"name\" id=\"name\" value=\"$name\" size=\"50\">"; 

    echo "<br>Nearby Suggestions: <select name='nearby' id='nearby'>"; $places=file_get_contents('https://maps.googleapis.com/maps/api/place/nearbysearch/json?location='.$lat.','.$long.'&key=xxx&radius=80'); 
    $output= json_decode($places,true); 
    foreach($output['results'] as $place){ 
    echo "<option value='$place[name]'>$place[name]</option>"; 
    } 
    echo "</select>"; 


    #script to enter nearby field into name field upon selection 
    echo " 
<script>$(document).on('change','#nearby',function(){ 
    var x = document.getElementById(\"nearby\"), 
    selectedValue = x.value; 
    selectedValue = selectedValue.replace(/'/g, \"\\'\"); 
    $('input[name=name]').val(selectedValue); 
    });</script>"; 
+0

可能不会解决您的问题,但您应始终在PHP中使用引号包装字符串。 '$ place [name]'是无效的。它应该始终是'$ place ['name']'或'$ place [“name”]''。必要时使用连接:'“

回答

0

您不会逃避来自您的googleapis调用的值。所以,当你盲目地喜欢Jim's Place值加载到<option>标签,生成的代码是:

<option value='Jim's Place'>Jim's Place</option> 

其中包含3撇号和坏。先转换这些值。

foreach($output['results'] as $place){ 
    $place_converted = htmlspecialchars($place['name'], ENT_QUOTES); 
    echo "<option value='$place_converted'>$place_converted</option> 
} 

其正确生成:

<option value='Jim&#039;s Place'>Jim&#039;s Place</option> 
+0

谢谢你的帮助和很好的解释。完美的作品! – jdecker

0
echo "<option value='$place[name]'>$place[name]</option>"; 

导致不匹配的报价。尝试将其替换为

echo "<option value=\"$place[name]\">$place[name]</option>"; 

您可以跳过包含该值的双引号。

相关问题