jQuery验证:iframe中的compareTo元素,以其自己的形式

时间:2016-05-18 22:35:33

标签: javascript jquery jquery-validate

在这里使用深度遗留系统,无法超出当前页面来修改内容。

现在,CAPTCHA是手工制作的。这也是不可替代的。 Captcha通过iFrames带来两件事:图像本身,以及包含人填充的字段的实际值的表单可以被验证。有一种JavaScript方法可以将该值带入页面,但是通过iFrame的onLoad属性调用/填充的全局值:

<iframe name="frmeIMGVal-Value" id="frmeIMGVal-Value" src="_Inc/Forms/DynamicImg-Value.php" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" width="0" height="0" onload="Javascript: RefreshImageClickPart3();" style="display: none;"><noframes>This web form requires that inline frames be enabled.</noframes></iframe>

iFrame本身非常简洁:

<?php
session_start();
$strValue = (@!isset($_SESSION['ValidationImgValue'])) ? "Not Set" : $_SESSION['ValidationImgValue'];
?>
<!DOCTYPE html">
<html>
  <head>
   <meta charset="UTF-8">
  </head>
  <body>
    <form name="frmImgValue" id="frmImgValue">
      <input type="hidden" name="hdnImgValue" id="hdnImgValue" value="<?php echo $strValue; ?>" />
    </form>
  </body>
</html>

但是我无法在当前页面中调用$_SESSION['ValidationImgValue'],因为它会被创建 AFTER 当前页面被加载:它在第一次创建时创建iFrame调用图像。

我的问题是我需要能够直接从jQuery Validate code中访问此值。具体来说,我有

txtValidateImg: {
  required: true,
  equalTo: "#chkValue"
}

但我需要能够引用全局变量而不是#chkValue。只是将该变量放在那里会导致整个脚本停止运行,因为它没有预料到 - 它期望一个元素的ID,它不存在于页面中;它存在于页面上的iFrame中存在的不同形式中。

请理解,我无法修改页面外的任何内容。我已经尝试读取元素并提取其值:

$(function(){
  $('#chkValue').val(
    $('#frmeIMGVal-Value').contents().find('#hdnImgValue').val()
  );
});

进入页面上的另一个隐藏元素:

<input type="hidden" id="chkValue" name="chkValue" value="" />

但这也不起作用(再一次,所有验证都停止运作)。

建议?

编辑:好奇的是,有一个包含JS的全局JS文件,它被第二个正在加载的iFrame调用:

function RefreshImageClickPart3(){
  strImgValue = window.frames['frmeIMGVal-Value'].document.forms['frmImgValue'].hdnImgValue.value;
}

此文件正在从<head>调用,并在其他页面中完美运行 - strImgValue的值可直接从页面中的其他位置访问。但是,当我将其他代码修改为:

$(function(){
  $('#chkValue').val( strImgValue );
});

甚至只是

$('#chkValue').val( strImgValue );

隐藏的输入字段仍然无法填充。

0 个答案:

没有答案