小编Nag*_*sad的帖子

是的,基于非字段值的条件验证

我正在尝试创建一个 yup 模式,其中模式根据变量值略有变化。就我而言,根据 prop 的值,myCondition我需要根据需要创建一个字段。我想知道是否有更好的方法可以使用 Yup 实现相同的目的。这是我当前有效的代码结构:

// config.js
const COMMON_SCHEMA = {
  str1: yup
    .string()
    .nullable()
    .required('Please input str1'),
  str3: yup
    .string()
    .nullable()
};
const VALIDATION_SCHEMA_1 = yup.object().shape({
  ...COMMON_SCHEMA,
  str2: yup.string().nullable(),
});

const VALIDATION_SCHEMA_2 = yup.object().shape({
  ...COMMON_SCHEMA,
  str2: yup
    .string()
    .nullable()
    .required('Please input str2'),
});

const SCHEMAS = {
  VALIDATION_SCHEMA_1,
  VALIDATION_SCHEMA_2
}
export default SCHEMAS;
Run Code Online (Sandbox Code Playgroud)

以下是我有条件地选择不同模式的方法:

// app.js
import SCHEMAS from './config';
...

<Formik
  validationSchema={
    this.props.myCondition === true
      ? SCHEMAS.VALIDATION_SCHEMA_1
      : SCHEMAS.VALIDATION_SCHEMA_2
  }
>
...
</Formik>
Run Code Online (Sandbox Code Playgroud)

我觉得我可以用更简单的方式实现上面所做的任何事情 …

javascript reactjs yup formik

9
推荐指数
1
解决办法
8849
查看次数

如何在puppeteer中禁用缓存?

我想在puppeteer中禁用缓存,有人可以告诉我该怎么做吗?我找到了,page.setCacheEnabled(enabled)但是我不明白如何使用它。

我知道浏览器是在没有缓存或Cookie的情况下启动的,但就我而言,浏览器始终在后台运行,因此需要其他解决方案。

javascript node.js puppeteer

7
推荐指数
3
解决办法
8353
查看次数

puppeteer:如何在 SPA 中等待页面?

我正在尝试使用 puppeteer 浏览 SPA,我在这里面临的问题是我无法等待页面加载然后继续我的程序。

我填写了一个表格,然后点击提交,根据表格的内容,可以加载不同的页面,所以我不能使用,page.waitFor(Selector)因为根据输入可以有很多不同的页面。

我尝试使用waitUntil:load、networkidle2、networkidle0、domcontentloaded,但它们都在元素加载之前触发。

我试图自动化的页面是Link。(如果你想自己检查,然后选择预订参考并填写随机详细信息,然后按继续。)

在链接中选择“预订参考”后,我用 puppeteer 填写详细信息,然后按继续按钮,我无法弄清楚如何在不依赖选择器的情况下等待页面完全加载。

javascript node.js puppeteer

7
推荐指数
1
解决办法
4092
查看次数

为什么我的函数无法返回具有特定文本内容的元素?

我有一个函数matchTagAndText,正如名称所说,接受2个参数的选择器和文本,并检查是否有任何匹配的元素具有给定的文本.它是这样的:

function matchTagAndText(sel, txt) {
    var elements = document.querySelectorAll(sel);
    return Array.prototype.filter.call(elements, function(element){
        return RegExp(txt,'i').test(element.textContent);
    });
} 
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试选择一个td包含文本'Lorem ipsum' 的元素,但我无法这样做.

我的HTML:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Frames</title>
</head>
<body>
    <td colspan="2" class="font-description">
        Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempora nulla iste, quae necessitatibus. Impedit mollitia delectus eum voluptas ullam! Perspiciatis in dolorem blanditiis dolores mollitia sint nostrum sunt veniam est!
    </td>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我在控制台中定义它后尝试调用该函数:

var el = matchTagAndText('td.font-description','Lorem ipsum');
Run Code Online (Sandbox Code Playgroud)

但是这会返回一个空数组.我的功能出了什么问题?

实例:

function matchTagAndText(sel, txt) { …
Run Code Online (Sandbox Code Playgroud)

javascript arrays dom

7
推荐指数
1
解决办法
381
查看次数

如何将木偶操作者的焦点转移到弹出窗口

我正在使用Puppeteer在网站上运行测试.单击按钮后,将出现一个带有报告的新弹出浏览器窗口.在那个新窗口中是我想要提取的信息.如何让木偶操作者将焦点转移到这个新创建的浏览器窗口?

我的木偶操作页面上有多个打印按钮,点击它会创建弹出窗口,我正在尝试获取这些页面的pdf.这是我正在使用的代码.

let printButtons = await this.page.$$('#printNowButton');
for (var i = 0; i < printButtons.length; i++) {
    printButtons[i].click();
    const fileName = ('Document'+ i + '.pdf');
    browser.on('targetcreated', async target => {
        if ((target.url() !== 'about:blank')) {
            try {
                const pageList = await browser.pages();
                const newPage = await pageList[pageList.length - 1];
                await newPage.pdf({
                    path: fileName,
                    format: 'A4'
                }).then(() => {
                    newPage.close();
                });
            } catch (e) {
                console.log('Error: ' + e);
            }
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

我正在使用puppeteer版本0.13.0任何其他方式来获得我想要实现的目标也值得赞赏.

javascript node.js puppeteer

6
推荐指数
1
解决办法
1120
查看次数

什么是依赖'typeof null'返回对象的代码示例?

我正在读这本名为YDKJS的书,它提到:

typeof null是一个有趣的案例,因为"object"当你期望它返回时,它会错误地返回"null".

警告:这是JS中一个长期存在的错误,但可能永远不会修复.Web上的代码过多依赖于bug,因此修复它会导致更多错误!

我无法绕过任何使用a的返回类型的代码null.任何人都可以举一些例子用例吗?

javascript typeof

4
推荐指数
1
解决办法
98
查看次数

如何使用Javascript选择具有特定文本内容的所有锚标记?

我想使用 document.querySelector() 中的选择器来选择所有带有文本“print”的标签。

<a href="https://www.google.co.in">print</a>
Run Code Online (Sandbox Code Playgroud)

我怎样才能选择相同的。我不想使用 jQuery。我不必只是 querySelector 但任何其他选择器都可以。

html javascript css-selectors selectors-api

3
推荐指数
1
解决办法
8714
查看次数

在新选项卡中打开多个链接并使用puppeteer循环切换焦点?

我在一个页面中有多个链接,我想按顺序或一次性访问.我想要做的是打开各自新标签中的所有链接,并将页面作为所有页面的pdf.我如何与木偶戏实现同样的目标?

我可以获得DOM和href属性的所有链接,但我不知道如何在新选项卡中打开它们访问它们然后关闭它们.

javascript node.js puppeteer

3
推荐指数
2
解决办法
3716
查看次数

如何设置动态变化表的索引?

我创建了一个表单,您可以使用javascript和jQuery添加或删除表行.我想知道如何获取和设置每个表行的索引,以便即使我要从表的中间删除和元素,也保持序列.该表的形式如下:

<thead>
    <tr>
        <th>Index</th>
        <th>Name</th>
        <th>Property</th>
        <th>Edit/Delete</th>
    </tr>
</thead>
<tbody>
    <tr>
        <td class="index">Index goes here (1)</td>
        <td>NameOne</td>
        <td>PropOne</td>
        <td><span class="edit">Edit Icon</span> <span class="delete">Delete Icon</span></td>
    </tr>
    <tr>
        <td class="index">2</td>
        <td>NameTwo</td>
        <td>PropTwo</td>
        <td><span class="edit">Edit Icon</span> <span class="delete">Delete Icon</span></td>
    </tr>
    <tr>
        <td class="index">3</td>
        <td>NameThree</td>
        <td>PropThree</td>
        <td><span class="edit">Edit Icon</span> <span class="delete">Delete Icon</span></td>
    </tr>
</tbody>
Run Code Online (Sandbox Code Playgroud)

现在我想要实现的是,如果我要删除第二行,前一行的索引应该自动更改为2,如果我要添加新元素,它应该自动取索引值3,依此类推.

我尝试用以下方法实现这一点:

function setIndex(){
   $("td.index").each(function(index) {
       $(this).text(++index);
   });
}
Run Code Online (Sandbox Code Playgroud)

但是当我使用上面的函数时虽然初始索引正确地添加了元素,但是当我在删除或编辑一行后再次调用该函数时,索引将无法正确更新(我使用jQuery remove删除了行).

我也用jQuery append()创建新的表行.

我认为虽然我使用了remove(),但是当我在setIndex()中使用console.log("test")语句时,它们并没有被完全删除,尽管"test"只应打印两次(我最初创建了3行并删除其中一行)它打印三次,表示有3个tr.index.

请帮我解决一下.

javascript css jquery html-table

2
推荐指数
1
解决办法
504
查看次数

为什么我的this.class总是未定义jQuery过滤器?

我试图获得所有div元素与名称包含print的类.我试图这样做:

const matchedContainer = [];
    $('div').filter(() => {
        regex = new RegExp("\w*print\w*","i");
        if( this.class !== undefined && this.class.match(regex)) {
            var elementContents = $(this).prop('outerHTML'); 
            matchedContainer.push(elementContents);
        }
    }
Run Code Online (Sandbox Code Playgroud)

在这里,我永远无法进入if循环,因为this.class始终等同于undefined.我也用".each"而不是".filter"尝试了相同的结果.我也尝试通过".filter((ind,elem)=> {...})"给每个元素命名,然后尝试使用elem.class,但这样做也不行.

我用this.id尝试了类似的方法,并且工作正常,任何人都可以告诉我我做错了什么?

javascript regex jquery

0
推荐指数
1
解决办法
218
查看次数