jquery单击处理程序语言集


jquery click handler language set

我在页面索引上有 3 个链接.php:

<div id="languages">
    <a href="index.php?page=test&lang=en" id="flag">
        <img src="./images/flags/en.png" class="flag_off" alt="en" title="en">
    </a>
    <a href="index.php?page=test&lang=sk" id="flag">
        <img src="./images/flags/sk.png" class="flag_off" alt="sk" title="sk">
    </a>
    <a href="index.php?page=test&lang=cz" id="flag">
        <img src="./images/flags/cz.png" class="flag_on" alt="cz" title="cz">
    </a>                 
</div>

它们中的每一个都在同一页面上传递 lang 参数(index.php)。然后我有变量

$_GET['lang']

这将调用函数来更改语言:

$obj->change_language($_GET['lang']);

问:如何使用 jquery get() 函数而不在索引.php页面的 url 中显示参数来执行此操作?

(通过 jquery 传递变量$lang)

我不喜欢调用函数后带有参数的 URL,例如:

index.php?page=test&lang=sk

我想使用 .click() 函数作为处理程序。

编辑:

我有这样的东西:

$(document).ready(function(){
  $("#flag").click(function(){
      $.get('index.php',
         { lang: "VARIABLE LANG FROM HREF" }
     );
     });
  });

如何从 href index.php?page=test&lang=sk part 解析 sk

如果您的问题是 URL 中的参数,您可以尝试使用 Ajax (http://api.jquery.com/jQuery.ajax/) 进行设置,而不是重新加载页面。我认为您无法绕过刷新,因为您的内容也应该更改为所选语言?

$(".flag").click(function(event) {
    event.preventDefault();
    $.get(this.href, function(data) {
        location.reload();
    });
});

你根本不需要jQuery这样做。你可以做类似的事情

<div id="languages">
    <a href="changeLanguage.php?lang=en">
        <img src="/flags/en.png" alt="en" title="en">
    </a>
    <a href="changeLanguage.php?lang=sk">
        <img src="/flags/sk.png" alt="sk" title="sk">
    </a>
    <a href="changeLanguage.php?lang=cz">
        <img src="/flags/cz.png" alt="cz" title="cz">
    </a>                 
</div>

然后,在这个changeLanguage.php中,你做你的$obj->change_language($_GET['lang']);(你应该检查/强制转换lang参数的值),然后,你可以将用户重定向到引用页面,

如下所示
$url = (string) $_SERVER['HTTP_REFERER'];
if (0 === strlen($url)) {
     // redirect to the home page if there is no referer
     $url = '/';
}
header('Location: '.$url);

这样,您就不需要任何Javascript代码。我认为这在某些方面很重要:

  • 使用 AJAX 解决方案,您只执行一个 HTTP 请求而不是两个请求,
  • 当用户单击时,浏览器会立即做出反应:请求在单击后立即发送,因此浏览器的"加载图标"显示正在发生某些事情
  • 这种动作>反应的效果在用户体验中很重要,使用 AJAX 解决方案,您必须等待第一个请求完成才能触发"加载图标",
  • 与 AJAX 解决方案一起使用的location.reload()可以显示一个对话框,例如 Would you like to submit the form again ? 如果用户已通过POST请求到达此页面,并且他可能不了解其操作(更改语言)与此"错误"消息之间的关系,这也会导致用户体验下降,
  • 如果您的Javascript以某种方式损坏,如果您的页面更改语言仅更改语言,则这些链接可能根本不起作用。假设页面index.php?page=test&lang=en正在执行类似 $obj->change_language($_GET['lang']); exit; 的操作,因为此页面的目的只是更改语言。然后,如果 Javascript 代码因任何原因未被触发(代码被破坏,处理程序未绑定,用户在新选项卡中打开页面),则加载的页面将是一个空白页面。如果你处理这种情况,那么"更改语言页面"看起来像一个普通页面,没关系,但这意味着你将使用"完整"响应执行两个HTTP请求(一个用于更改语言,另一个在location.reload之后),这导致了第一点,
  • 仅在需要的地方使用Javascript:)

你觉得怎么样?